xml解析 - nokogiri vs转换为树结构

时间:2015-08-03 21:46:08

标签: ruby xml xpath nokogiri

我们有一个大的xml文件,表示一组数据中的许多不同项。这个xml都不使用属性,xml中的每个项目都直接映射到ActiveRecord模型。

对我来说,最简单的解决方案似乎是将每个项目转换为ruby哈希。 Xpath似乎只会使每个数据片段转换为ActiveRecord模型变得复杂。

然而,nokogiri非常受欢迎。我试图了解我是否有一个我失踪的好处。

据我所知,nokogiri(或其他基于Xpath的解析器)的两个好处是查询能力和属性处理。

1)我在这里缺少其他好处吗?

2)对于我们的用例,即解析xml并将这些单个文档转换为ActiveRecord模型,有没有理由不将文档转换为ruby哈希以便于处理?

1 个答案:

答案 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)