2010-08-04 107 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