【发布时间】:2013-06-12 22:39:48
【问题描述】:
上下文:我正在使用 libxml-ruby gem 解析一个 XML 文件。我需要使用 XPath find 方法在 XML 文档中查询一组节点。然后我需要单独处理每个节点,使用 XPath find 方法再次查询它们。
问题:当我尝试单独查询返回的节点时,XPath find 方法正在查询整个文档而不仅仅是节点:
代码示例:
require 'xml'
string = %{<?xml version="1.0" encoding="iso-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>}
xml = XML::Parser.string(string, :encoding => XML::Encoding::ISO_8859_1).parse
books = xml.find("//book")
books.each do |book|
price = book.find("//price").first.content
puts price
end
此脚本两次返回29.99。我认为这必须与设置 XPath 上下文有关,但我还没有想出如何完成它。
【问题讨论】:
-
我强烈建议您使用 Nokogiri 进行 XML 解析。这是 Ruby 的事实标准。
-
我实际上开始使用 Nokogiri 并遇到了同样的问题。我切换到 libxml-ruby 希望那里的情况会有所不同,但同样的问题仍然存在。
-
嗯...当问题出现时,您知道它不在库中。 :-) 去过那里,做过太多次记不住了。坚持Nokogiri;它摇摆不定。
标签: ruby libxml-ruby