在Ruby中解析XML文档

7
我正在使用REXML库。
<foo>
  <baa>value</baa>
</foo>

我想获取属于<baa>的值。
我该如何做?

我假设你的 XML 应该是 "<foo><baa>value</baa></foo>",即包含结束标签。 - Chris Lutz
3个回答

9
尝试这个
require 'rexml/document'

doc = REXML::Document.new File.new('mydoc.xml')

doc.elements('*/foo/baa') { |element| puts element.get_text }

我个人更喜欢Nokogiri和Hpricot这两个宝石。如果你想的话,你可以尝试一下。


0
require 'rexml/document'

xml = <<-EOS
<foo>
  <baa>value</baa>
</foo>
EOS

doc = REXML::Document.new(xml)
doc.root.elements.each("baa") { |element| p element.text }

如果你想收集数值,可以使用 to_a.map 或者 inject。 请参考 REXML::ELements


0
Rishav的解决方案对我来说不起作用。
11:50:18 Temp$ ruby rx.rb
rx.rb:5:in `elements': wrong number of arguments (1 for 0) (ArgumentError)
        from rx.rb:5
11:50:25 Temp$

以下是一些替代方法:
require 'rexml/document'

doc = REXML::Document.new DATA

doc.elements.each('//foo/baa') { |element| puts element.get_text }
baas = REXML::XPath.each(doc, '//foo/baa/text()') {|txt| p txt}
p baas

__END__
<foo>
  <baa>value</baa>
</foo>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接