我调用方法">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