web-dev-qa-db-ja.com

単一ノードでXPathを使用すると、すべてのノードの要素が返されます

次のような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ノードだけになります。ドキュメント全体から同じ種類の子ノードのすべてではなく、各ノードから子ノードを連続して引き出すことができる必要があります。私は何が間違っているのですか?

44
Sabrina

//titleを使用すると、ドキュメントのルートから始まるすべての<title>要素が検索されます。子タイトルを検索するには単にtitleを使用するか、他の要素内にネストされている場合でもタイトルを検索する場合は.//titleを使用します。

75
John Kugelman

タイトルのxpath式から//を削除します。

0
drummondj