2014-12-08 175 views
0

我正在運行一個else循環遍歷ruby中的XML文件,並將值分配給一個散列值。 XML文件中有3個項目,但由於某種原因,它只能通過第一個項目進行迭代,爲什麼?Else Loop只運行一次

require "nokogiri" 

f= File.open("untitled.xml") 

    doc = Nokogiri::XML(f) 

    f.close 

    doc.xpath('//item').each do |node| 

     children = node.children 

     item = { 
     "name" => node['name'], 
     "buyItNowPrice"=> children.css('buytItNowPrice').inner_text, 
     "description" => children.css('description').inner_text, 
     "startingBidPrice" => children.css('startingBidPrice').inner_text, 
     "closing_time" => children.css('closing_time').inner_text, 
     "closing_date" => children.css('closing_date').inner_text 
     } 

    puts item 
    end 

XML:

<item name = "Test Thing"> 
    <description>Something Coolest.</description> 
    <buytItNowPrice>154.99</buytItNowPrice> 
    <startingBidPrice>9999.99</startingBidPrice> 
    <closing_date>2014-12-25</closing_date> 
    <closing_time>12:32:PM</closing_time> 
</item> 

<item name = "Lazer"> 
    <description>Something Cool.</description> 
    <buytItNowPrice>149.99</buytItNowPrice> 
    <startingBidPrice>9.99</startingBidPrice> 
    <closing_date>2014-12-25</closing_date> 
    <closing_time>12:32:PM</closing_time> 
</item> 

<item name = "Pokemon"> 
    <description>Something even cooler.</description> 
    <buytItNowPrice>33.99</buytItNowPrice> 
    <startingBidPrice>9.99</startingBidPrice> 
    <closing_date>2014-12-25</closing_date> 
    <closing_time>12:32:PM</closing_time> 
</item> 

輸出僅是第一項打印。

+1

只是在黑暗中刺,但也許是因爲你的XML無效?嘗試將你的''包裝在''根節點中,然後遍歷它。 – kasoban 2014-12-08 08:55:00

+0

就是這樣,謝謝! – user2816254 2014-12-08 09:02:57

+0

我從那個評論中創建了一個答案,你應該能夠在幾分鐘內將其標記爲已接受。很高興我能幫上忙! – kasoban 2014-12-08 09:08:55

回答

1

給出的示例XML無效。

有效的XML文檔都需要一個根節點,現在你有3

你可以通過在<items>根節點包所有<item>節點解決這個問題,並通過其子迭代即可。