我已经阅读了我能找到的所有内容,但由于标题中提到的原因,我只是想确认以下内容不是有效的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 ')'