次のようなXMLドキュメントを解析しています。
<MyBook>
<title>Favorite Poems</title>
<issn>123-456</issn>
<pages>45</pages>
</MyBook>
<MyBook>
<title>Chocolate Desserts</title>
<issn>654-098</issn>
<pages>100</pages>
</MyBook>
<MyBook>
<title>Jabberwocky</title>
<issn>454-545</issn>
<pages>19</pages>
</MyBook>
Xpathを使用してMyBookノードを引き出し、次のように繰り返します。
xmldoc.xpath("//MyBook").each do |node|
mytitle=node.xpath("//title").text
puts mytitle
end
出力は次のようになります。
Favorite PoemsChocolateDessertsJabberwocky
Favorite PoemsChocolateDessertsJabberwocky
Favorite PoemsChocolateDessertsJabberwocky
ノードが実際にはxmldoc全体であるかのように。ただし、イテレータ内のノードを印刷すると、期待どおりになるたびに、1つのMyBookノードだけになります。ドキュメント全体から同じ種類の子ノードのすべてではなく、各ノードから子ノードを連続して引き出すことができる必要があります。私は何が間違っているのですか?
//title
を使用すると、ドキュメントのルートから始まるすべての<title>
要素が検索されます。子タイトルを検索するには単にtitle
を使用するか、他の要素内にネストされている場合でもタイトルを検索する場合は.//title
を使用します。
タイトルのxpath式から//を削除します。