お世話になっております。
rexmlライブラリを使用してxmlの要素を取得したいと考えています。
このとき、要素Aが子要素B1, B2の属性が一致する場合のみを取得したいのですが、解決できません。
具体的には、、
XML
1<?xml> 2<feed> 3 <title>Mail Filters</title> 4 5 <A> # 表示する 6 <category term='filter'></category> 7 <title>Mail Filter</title> 8 <id>tag:mail.google.com</id> 9 <content></content> 10 <B name='MatchName_B1' value='matchValue_1st_B1'/> # 一致する 11 <B name='MatchName_B2' value='matchValue_1st_B2'/> # 一致する 12 </entry> 13 <A> # 表示しない 14 <category term='filter'></category> 15 <title>Mail Filter</title> 16 <id>tag:mail.google.com</id> 17 <content></content> 18 <B name='MachtName_B1' value='machValue_2nd_B1'/> # 一致する 19 <B name= 'NotMachtName_B2' value='NotMachValue_2nd_B2'/> #一致しない 20 </entry> 21 22</feed>
上記の例のXMLから
B要素の属性 Name が 'MatchName_B1' ,'MatchName_B2' の両方を含む(一致する)
要素A を表示したいと考えています。(上記の例では上のA要素のみ表示します)
以下のように2重のループで処理できないかと考えたのですが、
属性を取得できませんでした。
ruby
1require 'rexml/document' 2 3doc = REXML::Document.new(open(ARGV[0])) 4 5doc.elements.each('feed/entry') do |A| 6 7 atterB1 = "" 8 atterB2 = "" 9 10 A.each do |atterXml| 11 if atterXml.attributes["name"] == "B1" then #<-コンパイルエラー 12 atterB1 = listNames.push(element.attributes["value"] 13 elsif atterFacter.attributes["name"] == "B2" then 14 atterB2 = listNames.push(element.attributes["value"] 15 end 16 end 17 18 ## Do something 19 # atterB1 と atterB2 に文字列があれば 要素Aを表示する。 20end
初歩的なところなのかもしれませんが、お力添えをお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/11 06:18 編集