2010-08-04 109 views
9

我为Firefox做了一个插件,它使用ajax加载一个html页面(插件是XUL面板)。哪个更快,XPath或Regexp?

现在,在这一点上,我没有搜索创建document对象的方法,并将ajax请求内容放入其中,然后使用xPath来查找我需要的内容。
相反,我加载的内容和解析它作为文本与正则表达式。

但我有个问题。哪个更好用,xPath或正则表达式?哪个更快执行?

HTML页面将由数百个包含相同文本的元素组成,我基本上想要做的是统计有多少元素。

我希望我的插件能够尽可能快地工作,而且我不知道regexp或xPath背后的机制,所以我不知道哪个更有效。

希望我清楚。谢谢

+6

强制性链接:[**不要使用正则表达式**](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 ) – Amarghosh 2010-08-04 13:57:48

+0

两者本质上都比另一个更快 - 这一切都取决于它们的实现。 – 2010-08-04 14:03:27

+0

只是想知道,为什么有些人认为这不是一个真正的问题?对于典型的编程任务,要求什么类型的方法是最好的(或最快的),在我看来,就像在SO(imo)上要求的一个真正的问题。 – Abel 2010-08-04 14:11:03

回答

17

无论何时您处理XML,请使用XPath(或XSLT,XQuery,SAX,DOM或任何其他可识别XML的方法来浏览您的数据)。 Do never use regular expressions for this task

为什么? XML处理错综复杂,处理所有的怪事,外部/分析/未分析实体,DTD,处理指令,空白处理,折叠,unicode标准化,CDATA部分等等,使得它很难创建一个可靠的正则表达式数据。只要考虑到它已经花了行业多年来学习如何最好地解析XML,应该有足够的理由不要试图自己动手做这个

回答您的问题:谈到速度(其中而不是是您的主要关注点),它高度依赖于XPath或Regex编译器/处理器的实现。有时,XPath会更快(即,如果可能的话,或者编译XSLT时使用键),其他时候,正则表达式会更快(如果您可以使用预编译的正则表达式,并且查询很容易)。但是正则表达式对于HTML/XML来说绝非易事,因为嵌套的括号(标签)问题是无法用正则表达式单独解决的。

如果输入是巨大的,正则表达式往往会更快,除非XPath实现可以做流处理(我相信这不是在Firefox内部的方法)。

您写道:

“这是更有效的” *

,为您带来快捷的可靠和稳定的实现,是比较迅速的一个。使用XPath。如果你需要你的代码从浏览器运行,那么它就是在Firefox和其他浏览器中使用的。

+0

感谢您的答复。现在我有另一个新手问题。你会碰巧知道如何在Firefox插件的XUL中创建一个新的HTML或XML文档对象吗?由于document.evaluate仅适用于XML和HTML,而不适用于XUL。我需要以某种方式将AJAX响应文本放到DOM文档中,以便能够使用xPath。我花了40分钟寻找这个,但仍未找到。我知道我可以将内容加载到一个新标签中并在那里访问,但这不是我想要做的。谢谢。 (不知道我是否需要创建一个新问题,而不是在这里发表评论) – user1651105 2010-08-04 14:39:44

+1

@aleluja:你应该再次询问你的新问题。 – 2010-08-04 14:54:31

+0

伟大的答案,只需再添加一件事:实际上最新的xpath技术优于正则表达式。 – 2011-01-23 22:34:36