BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Ruby XML综述:Hpricot 0.7、稳定的Libxml-ruby及Nokogiri

| 作者 Werner Schuster 关注 9 他的粉丝 ,译者 张龙 关注 14 他的粉丝 发布于 2009年3月28日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

最近由于Nokogiri、Hpricotlibxml-ruby之间的竞争致使Ruby的XML支持得到了极大的改进。Nokogiri发布于去年秋天,它基于本地的libxml2和libxslt

由于Nokogiri使用了libxml2,因此使用者可以获得如下好处:快速解析、i18n支持、快速搜索、基于标准的XPath支持、命名空间支持及成熟的HTML修正算法。

Nokogiri还具有诸如使用XPath和CSS选择符进行搜索的特性,同时它还支持Ruby 1.9.1

一些基准的结果表明Nokogiri的性能是最棒的,之后Hpricot的维护者就花费了大量心力对该库进行改进并发布了Hpricot 0.7

来享受这个新的、卓越的Hpricot吧。它快一些、支持Ruby 1.9而且还进行了不少修复...

我敢肯定你想知道为何面对Nokogiri和LibXML的强大竞争我还要更新Hpricot呢。记住Hpricot不依赖于其他任何东西,同时它比这两个库都要小。Hpricot使用的是自己的基于Ragel的解析器,这样你就可以随意修改解析器了,相对来说其代码也更精简。

最重要的是过去Hpricot曾运行在JRuby上。现在我正忙于将IronRuby和0.7版的一些代码合并到JRuby上。这意味着无需调整你的代码就能运行在多种Ruby平台上,因此我这么做值了,你觉得呢?

最后libxml-ruby也发布了1.0版

* 支持Ruby 1.9.1
* 对OS X 10.5和MacPorts开箱即用的支持
* 优雅、干净的API可以轻松完成一些简单的事情,同时还提供了你所需要的libxml2的所有功能
最新的1.1.3版带有一个重要的改进
通过一个个的检查,最后我终于发现了一个隐蔽的问题:
int	dictNames	: Use dictionary names for the tree
该设置控制的是libxml2是否使用dictionary来缓存之前解析过的字符串。字符串的缓存与否会对性能造成极大的影响,因此默认情况下缓存应该是开启的。目前libxml-ruby 1.2.3+采取的都是这种方式。

借助于这个改变,现在libxml-ruby的性能与Nokogiri已不相上下。
 

查看英文原文:Ruby XML Roundup: Hpricot 0.7, Stable Libxml-ruby and Nokogiri

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT