Else Loop只运行一次

时间:2014-12-08 08:50:51

标签: ruby-on-rails ruby xml

我正在运行一个else循环来迭代ruby中的XML文件,为哈希值分配值。 XML文件中有3个项目,但由于某种原因,它只遍历第一个项目,任何想法为什么?

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 个答案:

答案 0 :(得分:1)

给定的示例XML无效。

有效的XML文档需要单个根节点,现在您有3个。

您可以通过将所有<item>节点包装在<items>根节点中来解决此问题,然后迭代其子节点。