野木里只返回一件物品



我调用方法">read",只从xml文件中返回一个项目

方法">读取"返回:

9
3
max
date
5

并且应该从 XML 返回所有项目

如何从读取方法中获取整个 XML?

require 'nokogiri'
require 'open-uri'
def create
  var = 0  
  while var < 10
    builder = Nokogiri::XML::Builder.new do 
      item {
        data var
        port '3'
        length 'max'
        date 'date'
        limit '5'
      }
      var += 1  
    end
  end
  return Nokogiri::XML(builder.to_xml).root.to_xml
end
def read    
  doc = Nokogiri::XML(create)
  doc.xpath('//item').each do |item|
    data = item.at_xpath('./data').content
    port = item.at_xpath('./port').content
    length = item.at_xpath('./length').content
    date = item.at_xpath('./date').content
    limit = item.at_xpath('./limit').content
    puts data
    puts port
    puts length
    puts date
    puts limit
  end
end
read

你的read方法很好。问题是XML文档不是你想象的那样。如果您查看 create 方法的输出,它只会创建以下文档:

<?xml version="1.0"?>
<item>
  <data>9</data>
  <port>3</port>
  <length>max</length>
  <date>date</date>
  <limit>5</limit>
</item>

这是因为您正在while循环中创建(以及重新创建和重新创建(文档。相反,你想要做这样的事情:

def create
  var = 0  
  builder = Nokogiri::XML::Builder.new do
    root do
      while var < 10
        item {
          data var
          port '3'
          length 'max'
          date 'date'
          limit '5'
        }
        var += 1  
      end
    end
  end
  return Nokogiri::XML(builder.to_xml).root.to_xml
end

请注意,我添加了一个 <root> 元素来包装您的所有项目,因为一个 XML 文档只能有一个根元素,而您似乎正在向其添加多个<item>元素。


此外,我可以建议你使用更像Ruby的循环来代替你的while循环:

10.times do |var|
  # no need to var += 1 here
  # the rest of your code
end

相关内容

  • 没有找到相关文章

最新更新