2012-06-21 26 views
3

XML數據:引入nokogiri返回的XML標記以及數據

<configs> 
<config> 
<name>XP</name> 
<browser>IE</browser> 
<browser>FF</browser> 
<browser>Chrome</browser> 
</config> 
</configs> 

我一般是新的紅寶石,引入nokogiri和編程。我正在嘗試編寫一個QA工具來幫助實現自動化。

Ruby代碼:

doc = Nokogiri::XML(open("configs.xml")) 
configs = doc.xpath("//configs/config").map do |i| 
    {'name' => i.xpath('name').to_s, 'browsers' => i.xpath('browser').to_s} 
end 

configs.each do |i| 
    puts i['name'] 
    puts i['browsers'] 
end 

這做什麼,我想它,它返回數據,但包括XML標籤。有沒有方法可以去掉他們,我只是沒有找到?

回答

7

使用.text得到文本節點數據:

:name => i.xpath('name').text 

.to_s是一個XML節點,這比你要找的字符串表示。

但是,如果您期待單個瀏覽器條目,則其餘代碼有點不一致。

原樣它將文本數據一起粉碎成一個blob。相反,它們連接在一起,等等,例如:

configs = doc.xpath("//configs/config").collect do |cfg| 
    browsers = cfg.xpath('browser').collect { |b| b.text }.join(', ') 
    { name: cfg.xpath('name').text, browsers: browsers } 
end 

configs.each do |i| 
    puts i[:name] 
    puts i[:browsers] 
end 

您可能希望"IEFFChrome"一個blob,在這種情況下沒關係。