0

LibXML for Rubyまたはその他のRubyライブラリを使用して、2つのノードの名前が同じである場合、どうすればその値を取得できますか?私はこのXMLを持っています:

<?xml version="1.0" encoding="ISO-8859-1"?>
<test>
  <test1>
    <foo>534569</foo>
  </test1>
  <test1>
    <foo>534570</foo>
  </test1>
</test>

の両方の値が必要ですfoo

4

2 に答える 2

2

個人的にはノコギリがオススメです。これは、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"
]
于 2012-11-07T19:30:36.827 に答える
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
于 2012-11-07T17:46:31.120 に答える