2014-12-08 125 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>节点解决这个问题,并通过其子迭代即可。