Ruby 在单个节点上使用XPath将返回所有节点中的元素

Ruby 在单个节点上使用XPath将返回所有节点中的元素,ruby,xml,parsing,nokogiri,Ruby,Xml,Parsing,Nokogiri,我正在解析一个XML文档,该文档如下所示: <MyBook> <title>Favorite Poems</title> <issn>123-456</issn> <pages>45</pages> </MyBook> <MyBook> <title>Chocolate Desserts</title> <issn>654-

我正在解析一个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>
Favorite PoemsChocolateDessertsJabberwocky
Favorite PoemsChocolateDessertsJabberwocky
Favorite PoemsChocolateDessertsJabberwocky
输出如下所示:

<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>
Favorite PoemsChocolateDessertsJabberwocky
Favorite PoemsChocolateDessertsJabberwocky
Favorite PoemsChocolateDessertsJabberwocky

就好像这个节点实际上是整个xmldoc一样。但是,如果我在迭代器中打印出节点,每次它都是我所期望的,只是一个MyBook节点。我需要能够依次从每个节点中提取子节点,而不是从整个文档中提取所有相同类型的子节点。我做错了什么?

当您使用
//title
时,这将搜索从文档根开始的所有
元素。只需使用
title
查找子标题,或者如果要查找标题(即使它们嵌套在其他元素中)。

从标题xpath表达式中删除//即可。

啊哈!非常感谢你。因此,将xpath表达式应用于节点并不重要?将
/
/
放在前面会使xpath成为绝对路径。使用这些时,XPath计算器将忽略上下文节点并从文档根开始。@JohnKugelman