Ответ 1
Когда вы используете //title
, это ищет все элементы <title>
, начиная с корня документа. Используйте просто title
для поиска дочерних титров или .//title
, если вы хотите найти названия, даже если они вложены внутри других элементов.
Я разбираю 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 из всего документа. Что я делаю неправильно?
Когда вы используете //title
, это ищет все элементы <title>
, начиная с корня документа. Используйте просто title
для поиска дочерних титров или .//title
, если вы хотите найти названия, даже если они вложены внутри других элементов.
Удалите//из выражения xpath заголовка.