在单个节点上使用XPath将返回所有节点中的元素
我正在parsing一个如下所示的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一样。 但是,如果我打印出迭代器中的节点,每次都是我所期望的,只是一个MyBook节点。 我需要能够从每个节点中连续地取出子节点,而不是从整个文档中的所有相同types的子节点。 我究竟做错了什么?
当你使用//title
这将search从文档根目录开始的所有<title>
元素。 如果要查找标题,即使它们嵌套在其他元素中,也可以使用title
来查找子标题或.//title
。
从标题xpathexpression式中删除//