我们有一个大的xml文件,表示一组数据中的许多不同项。这个xml都不使用属性,xml中的每个项目都直接映射到ActiveRecord模型。
对我来说,最简单的解决方案似乎是将每个项目转换为ruby哈希。 Xpath似乎只会使每个数据片段转换为ActiveRecord模型变得复杂。
然而,nokogiri非常受欢迎。我试图了解我是否有一个我失踪的好处。
据我所知,nokogiri(或其他基于Xpath的解析器)的两个好处是查询能力和属性处理。
1)我在这里缺少其他好处吗?
2)对于我们的用例,即解析xml并将这些单个文档转换为ActiveRecord模型,有没有理由不将文档转换为ruby哈希以便于处理?
答案 0 :(得分:0)
对于大型XML,您应该使用SAX解析。这样你的文件就不会作为一个整体加载到内存中,而是每次解析器命中节点时你的函数都会收到回调。
为了获得最快的性能,我建议Ox。
documentation的示例:
require 'stringio'
require 'ox'
class Sample < ::Ox::Sax
def start_element(name); puts "start: #{name}"; end
def end_element(name); puts "end: #{name}"; end
def attr(name, value); puts " #{name} => #{value}"; end
def text(value); puts "text #{value}"; end
end
io = StringIO.new(%{
<top name="sample">
<middle name="second">
<bottom name="third"/>
</middle>
</top>
})
handler = Sample.new()
Ox.sax_parse(handler, io)