在XML中获取重复节点的价值?

时间:2012-11-07 17:24:06

标签: ruby xml

如果它们具有相同的名称,使用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的两个值。

2 个答案:

答案 0 :(得分:2)

就个人而言,我建议使用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"
]

答案 1 :(得分:1)

您可以使用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