2011-06-05 4 views
2

Je suis nouveau Nokogiri, alors comment puis-je parse les « données » et il est du texte, ainsi que le « nom » de la « méthode » dans le code XML suivant:comment analyser des éléments répétés avec nokogiri

<get_escalators_response status="200" status_text="OK"> 
<escalator id="6181e65d-8ba0-4937-9c44-8f2b10b0def7"> 
<name>Team alert</name> 
<comment/> 
<in_use>1</in_use> 
<condition> 
    Threat level at least 
    <data> 
    High 
    <name>level</name> 
    </data> 
</condition> 
<event> 
    Task run status changed 
    <data> 
    Done 
    <name>status</name> 
    </data> 
</event> 
<method> 
    Email 
    <data> 
    [email protected] 
    <name>to_address</name> 
    </data> 
    <data> 
    [email protected] 
    <name>from_address</name> 
    </data> 
    <data> 
    0 
    <name>notice</name> 
    </data> 
</method> 
</escalator> 
... 
</get_escalators_response> 

Répondre

0

Il y a plusieurs façons de le faire, voici une:

doc = Nokogiri::XML("your_xml_document") 
doc.search("data").each do |data| 
    name = data.search("name").remove # remove the name element from data element 
    name_text = name.text 
    data_text = data.text 
    # do stuff with text 
end 

Vous pouvez rechercher des éléments imbriqués spécifiques comme celui-ci:

doc.search("method > data").each do |data| 
    # do stuff 
end 
+0

Merci, mais que se passe-t-il si je veux juste saisir le nom/les données de "méthode" et non pas "condition" ou "événement"? – cLee

+0

Nevermind, doc.search ("méthode/données"). Each do | data | ... semble fonctionner. Merci encore – cLee

1

Attribution à votre XML une variable appelée xml, je vais à ce sujet comme celui-ci:

require 'nokogiri' 
require 'pp' 

doc = Nokogiri::XML(xml) 
pp doc.search('//method/data').map{ |n| n.text.scan(/\S+/) } 

Avis ce retourne un tableau de tableaux. Il serait facile de contraindre les données en chaînes ou en hachages.

# >> [["[email protected]", "to_address"], 
# >> ["[email protected]", "from_address"], 
# >> ["0", "notice"]] 
Questions connexes