如果两个节点具有相同的名称,如何使用 LibXML for Ruby 或任何其他 Ruby 库来获取它们的值?我有这个 XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<test>
<test1>
<foo>534569</foo>
</test1>
<test1>
<foo>534570</foo>
</test1>
</test>
我想要foo
.
就个人而言,我建议使用Nokogiri。它已成为 Ruby 中 XML/HTML 解析的事实标准。
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<?xml version="1.0" encoding="ISO-8859-1"?>
<test>
<test1>
<foo>534569</foo>
</test1>
<test1>
<foo>534570</foo>
</test1>
</test>
EOT
doc.search('foo').map(&:text)
返回:
[
[0] "534569",
[1] "534570"
]
您可以使用该find
方法,该方法将返回与指定 xpath 匹配的所有节点。
下面是如何输出每个 foo 元素的内容的示例:
require 'libxml'
xml_sample = %q[<?xml version="1.0" encoding="ISO-8859-1"?>
<test>
<test1>
<foo>534569</foo>
</test1>
<test1>
<foo>534570</foo>
</test1>
</test>]
doc = LibXML::XML::Document.string(xml_sample)
doc.find('test1/foo').each{ |foo| puts foo.content }
#=> 534569
#=> 534570