我正在分析一个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 node ,并像这样迭代它们:

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 ,而不是从整个文档中取出所有相同类型的子 node .我做错了什么?

推荐答案

当使用//title时,它将搜索从文档根开始的所有<title>个元素.使用title查找子标题,或者使用.//title查找嵌套在其他元素中的标题.

Ruby相关问答推荐

这是 ruby​​ Regexp 中的错误吗?如何在不使用超时的情况下防止正则表达式匹配中的无限循环?

Ruby open-uri 重定向被禁止

将 pp 的结果(或输出到控制台的任何内容)放入字符串

Ruby 符号到类

Ruby $:.unshift File.dirname(__FILE__)

如何使用 Ruby 删除字符串中某个字符后的子字符串?

退出(exit)和中止(abort)有什么区别?

Encoding::UndefinedConversionError

osx bash上的树命令

Ruby 中的 -> (stab) 运算符是什么?

在 Ruby 中重写 to_s 方法不好吗?

include_examples和it_behaves_like有什么区别?

Ruby:更新哈希值的最简单方法是什么?

从命令行使用Bundle 器将 gem 添加到 gemfile

在ruby中将字符串转换为十进制数

如何从Ruby中的哈希表中获取第一个键值对

在 Ruby 中获取用户主目录的跨平台方法?

Ruby 中的Monkey Patching到底是什么意思?

如何判断数组是否有重复项?

严格将字符串转换为整数(或 nil)