Подтвердить что ты не робот

Использование XPath в одиночном node возвращает элементы во всех узлах

Я разбираю 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

как будто node - это действительно весь xmldoc. Однако, если я распечатаю node внутри итератора, каждый раз это то, что я ожидаю, только один MyBook node. Мне нужно иметь возможность вытягивать дочерние узлы из каждого node последовательно, а не всех одного и того же типа ребенка node из всего документа. Что я делаю неправильно?

4b9b3361

Ответ 1

Когда вы используете //title, это ищет все элементы <title>, начиная с корня документа. Используйте просто title для поиска дочерних титров или .//title, если вы хотите найти названия, даже если они вложены внутри других элементов.

Ответ 2

Удалите//из выражения xpath заголовка.