XPath 谓词前面必须有节点测试



我已经阅读了我能找到的所有内容,但由于标题中提到的原因,我只是想确认以下内容不是有效的XPath表达式。

//trip/[@trainID]

我已经发现表达式

//trip[@trainID]

选择属性名为trainID的所有trip元素,

并且该表达式

//trip/@trainID

选择trip元素上的所有trainID属性。

我也提到了这个答案。

提问原因:

我知道括号中的部分(即谓词(会创建一个过滤器。
我想也许有问题的表达式会在没有对属性进行任何测试的情况下像上面的第三个表达式一样起作用。但它在我的测试中不起作用,并且在下面确认表达式根本无效。

不,//trip/[@trainID]不是有效的 XPath。

就像你在标题中说的,谓词必须通过节点测试进行。

从 1.0 规范:

[4]       Step       ::=      AxisSpecifier NodeTest Predicate*   
| AbbreviatedStep

NodeTest 定义为:

[7]       NodeTest       ::=      NameTest    
| NodeType '(' ')'   
| 'processing-instruction' '(' Literal ')'

最新更新