我将方法称为“读取”并仅从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
答案 0 :(得分:0)
您的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-esque代替您的while
循环:
10.times do |var|
# no need to var += 1 here
# the rest of your code
end