2011-06-23 64 views
0

我有3個問題:的XPath性能&版本

1)是XPath字符串「//表[位置()= 8或位置()= 10]/TD [1] /跨度[2] /文本()「快於XPath字符串」// table [8]/td [1]/span [2]/text()| // table [10]/td [1]/span [2]/text() 「?

我在.NET CSharp和HTMLAgilityPack中使用XPath。

2)如何確定我使用的XPath版本。如果我使用XPath 1.0,如何升級到XPath 2.0?

3)在XPath 2.0中是否存在性能優化和改進,或者只是新特性和新語法?

回答

2

XPath 2.0在XPath 1.0(read here for a summary)上的顯着擴展,儘管除非您受益於新功能,否則不需要切換。

至於哪一個會更快,我相信第一個會更快,因爲你在第二種情況下重複節點搜索。第一種情況也更具可讀性,一般而言,您希望使用可讀性更強的文檔。

1

至於表現問題,恐怕我不知道。它取決於您正在使用的特定XPath處理器中的優化器。如果它對你很重要,那麼測量它。如果測量不夠重要,那麼擔心並不重要。

正如我在前面的回覆中提到的,//table[8]對我來說是錯誤的。我認爲你更想要(//table)[8]。 (兩者都是有效的XPath表達式,但它們產生不同的答案)。

您可以假設一個處理器是XPath 1.0,除非它另有說明 - 如果它支持2.0,他們會希望您知道。但是,您可以輕鬆測試,例如通過查看//a except //b時發生的情況。

在相同的查詢中,XPath 2.0處理器的速度應該比1.0處理器的速度更快,這並沒有內在原因。事實上,它可能會慢一點,因爲它需要做更仔細的類型檢查。另一方面,它可能要快得多,因爲很多1.0處理器很快就被破解掉了,從未升級過。但是,2.0中的功能有很大的改進,例如正則表達式支持。

+0

邁克爾,我想要所有表[8],所以我正確使用「//」沒有括號。我如何開關/升級到XPath 2.0?要檢查試圖運行函數的XPath的版本是我做的,而且似乎我的PC使用XPath 1.0。但我想知道是否有一種有效的方法來檢查版本? – user569008

+0

我不相信你不能回答我的問題#2 – user569008