2015-12-11 141 views
0

看來,在某些usecases表達// * [local-name()='element']和// *:element?之間的區別是什麼?

//*[local-name()='element'] 

選擇多於

//*:element 

或,換句話說,第一個表達式適用於更一般的電平,而第二個似乎工作更具限制性。

這可能是什麼原因?這似乎是一個命名空間問題,但我們還沒弄明白。

+1

您能否提供示例XML來演示此問題中描述的行爲?就我所見,兩種表達方式都是相同的。只有後者在XPath 1.0中不受支持 – har07

+0

這可能已經是問題的解決方案。根據環境和各種組件,可能會出現某處使用XPath 1.0的情況。謝謝你的提示! –

回答

1

node test*:element僅在XPath 2.0中有效。規範說:

節點測試也可以具有*:NCName的形式。在這種情況下,節點測試對於本地名稱與給定的NCName匹配的步進軸的主節點種類的任何節點都成立,而不管其名稱空間或缺少名稱空間。

所以相當於*[local-name()='element']

相關問題