2009-07-01 5 views
7

J'utilise la bibliothèque REXML.Analyser le document XML dans Ruby

<foo> 
    <baa>value<baa> 
<foo> 

Je veux obtenir la valeur appartient à baa.

Comment le coder?

+0

Je suppose que votre XML est censé être " valeur", à savoir avec des balises de fin. –

Répondre

9

essayer cette

 

require 'rexml/document' 

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

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

Je préfère Nokogiri et des pierres précieuses hpricot moi-même. Vous pouvez les essayer si vous le souhaitez.

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 } 

Si vous voulez collecter des valeurs, vous pouvez utiliser to_a.map ou injecter à la place. Voir REXML::ELements.

0

La solution de Rishav jette pour moi.

 
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$ 

Voici quelques approches alternatives:

 
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> 
Questions connexes