我想打开外部XML文件,解析它并使用数据存储在我的数据库中。我和Nokogiri很容易做到这一点:
file = '...external.xml'
xml = Nokogiri::XML(open(file))
xml.xpath('//Element').each do |element|
# process elements and save to Database e.g.:
@data = Model.new(:attr => element.at('foo').text)
@data.save
end
现在我想尝试(可能更快)Ox gem(https://github.com/ohler55/ox) - 但我不知道如何从纪录片中打开和处理文件。
上述代码的任何等效代码示例都很棒!谢谢!
答案 0 :(得分:8)
您无法使用XPath在Ox中定位节点,但Ox确实提供了locate
方法。您可以像这样使用它:
xml = Ox.parse(%Q{
<root>
<Element>
<foo>ex1</foo>
</Element>
<Element>
<foo>ex2</foo>
</Element>
</root>
}.strip)
xml.locate('Element/foo/^Text').each do |t|
@data = Model.new(:attr => t)
@data.save
end
# or if you need to do other stuff with the element first
xml.locate('Element').each do |elem|
# do stuff
@data = Model.new(:attr => elem.locate('foo/^Text').first)
@data.save
end
如果您的查询未找到任何匹配项,则会返回一个空数组。有关locate
查询参数的简要说明,请参阅element.rb上的源代码。
答案 1 :(得分:0)
doc2 = Ox.parse(xml)
要在Ruby中读取文件的内容,您可以使用xml = IO.read('filename.xml')
(以及其他)。所以:
doc = Ox.parse(IO.read(filename))
如果您的XML文件是UTF-8编码,则可选:
doc = Ox.parse( File.open(filename,"r:UTF-8",&:read) )