|
|
1
6
Nokogiri基于libxml2,它是任何语言中最快的XML/HTML解析器之一。它是用C语言编写的,但是有许多语言的绑定。 问题是文件越复杂,在内存中构建完整的DOM结构所需的时间就越长。创建一个DOM比其他解析方法更慢,也更需要内存(通常整个DOM必须适合内存)。xpath依赖于这个dom。 SAX通常是人们为了速度或不适合内存的大文档而求助的。它更受事件驱动:它通知您一个开始元素、结束元素等,并且您编写处理程序来响应它们。这有点痛苦,因为你最终会跟踪自己的状态(例如,你“内在”的元素)。 这里有一个中间地带:一些解析器具有“拉解析”功能,您可以在这里进行类似光标的导航。您仍然按顺序访问每个节点,但可以“快进”到您不感兴趣的元素的末尾。它具有SAX的速度,但对于许多用途来说,它是一个更好的接口。我不知道Nokogiri是否可以为HTML做这个,但我会研究它的 Reader API 如果你感兴趣的话。 请注意,Nokogiri对格式错误的标记(如真实的HTML)也非常宽容,仅此一点,就使得它成为HTML解析的一个非常好的选择。 |
|
|
2
16
看看牛宝石。它比libxml和nokogiri更快,支持内存解析和SAX回调解析。完全公开,我写的。 在性能比较中 http://www.ohler.com/software/thoughts/Blog/Entries/2011/9/21_XML_with_Ruby.html 比较了DOM(内存中)和SAX(回调)分析器。 |
|
|
3
2
|
|
|
4
0
您可能会发现,对于较大的XML文档,DOM解析的性能不是很好。这是因为解析器必须构建XML文档结构的内存映射。 另一种通常需要较小内存占用的方法是使用事件驱动的SAX解析器。 Nokogiri完全支持SAX。 |