2015-12-11 140 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']

相关问题