Ruby 获取XML中重复节点的值?

Ruby 获取XML中重复节点的值?,ruby,xml,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&

如果两个节点的名称相同,如何使用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>

534569
534570

我想要
foo

的两个值,您可以使用
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
需要'libxml'
xml\u示例=%q[
534569
534570
]
doc=LibXML::XML::Document.string(XML\u示例)
find('test1/foo')。每个{foo |放置foo.content}
#=> 534569
#=> 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
需要'libxml'
xml\u示例=%q[
534569
534570
]
doc=LibXML::XML::Document.string(XML\u示例)
find('test1/foo')。每个{foo |放置foo.content}
#=> 534569
#=> 534570

我个人建议使用。它已经成为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)

就个人而言,我建议使用。它已经成为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)