代码之家  ›  专栏  ›  技术社区  ›  maxschlepzig

什么是用于Ruby的快速XML解析器?[关闭]

  •  6
  • maxschlepzig  · 技术社区  · 15 年前

    我用的是Nokogiri,它很适合小文档。但是对于一个180kb的HTML文件,我必须通过 ulimit -s 解析和xpath查询需要很长时间。

    有没有使用股票红宝石发行版的更快的方法?

    我已经习惯了xpath,但解决方案不一定需要支持xpath。

    标准是:

    1. 写得快。
    2. 快速执行。
    3. 健壮的结果分析器。
    5 回复  |  直到 8 年前
        1
  •  6
  •   Mark Thomas    12 年前

    Nokogiri基于libxml2,它是任何语言中最快的XML/HTML解析器之一。它是用C语言编写的,但是有许多语言的绑定。

    问题是文件越复杂,在内存中构建完整的DOM结构所需的时间就越长。创建一个DOM比其他解析方法更慢,也更需要内存(通常整个DOM必须适合内存)。xpath依赖于这个dom。

    SAX通常是人们为了速度或不适合内存的大文档而求助的。它更受事件驱动:它通知您一个开始元素、结束元素等,并且您编写处理程序来响应它们。这有点痛苦,因为你最终会跟踪自己的状态(例如,你“内在”的元素)。

    这里有一个中间地带:一些解析器具有“拉解析”功能,您可以在这里进行类似光标的导航。您仍然按顺序访问每个节点,但可以“快进”到您不感兴趣的元素的末尾。它具有SAX的速度,但对于许多用途来说,它是一个更好的接口。我不知道Nokogiri是否可以为HTML做这个,但我会研究它的 Reader API 如果你感兴趣的话。

    请注意,Nokogiri对格式错误的标记(如真实的HTML)也非常宽容,仅此一点,就使得它成为HTML解析的一个非常好的选择。

        2
  •  16
  •   Peter Ohler    14 年前

    看看牛宝石。它比libxml和nokogiri更快,支持内存解析和SAX回调解析。完全公开,我写的。


    在性能比较中 http://www.ohler.com/software/thoughts/Blog/Entries/2011/9/21_XML_with_Ruby.html 比较了DOM(内存中)和SAX(回调)分析器。

        4
  •  0
  •   Steve Weet    15 年前

    您可能会发现,对于较大的XML文档,DOM解析的性能不是很好。这是因为解析器必须构建XML文档结构的内存映射。

    另一种通常需要较小内存占用的方法是使用事件驱动的SAX解析器。

    Nokogiri完全支持SAX。

        5
  •  0
  •   zachaysan    10 年前

    取决于你的环境, Oga 可能更适合作为 足够快 Ruby的XML解析器具有更好的接口和更快的安装时间。

    推荐文章