2011-06-05 142 views
2

如何解析重複的元素我是新來引入nokogiri,讓我怎麼解析「數據」,它在下面的XML是文本,以及 「姓名」,從「方法」:與引入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> 

回答

0

有幾種方法可以做到這一點,這裏有一個:

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 

您可以搜索特定的嵌套的元素是這樣的:

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

謝謝,但如果我只是想從「方法」中獲取名稱/數據而不是「條件」或「事件」呢? – cLee 2011-06-05 21:50:13

+0

Nevermind,doc.search(「method/data」)。each do | data | ...似乎工作。再次感謝 – cLee 2011-06-05 21:54:28

1

分配你的XML到一個名爲xml變量,我會去了解它是這樣的:

require 'nokogiri' 
require 'pp' 

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

請注意這是返回數組的數組。將數據強制轉換爲字符串或哈希值很容易。

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