我已阅读了我能找到的所有内容,但只是想确认以下内容不是是有效的XPath表达式,因为标题中提到的原因。
//trip/[@trainID]
我已经发现这个表达了
//trip[@trainID]
选择所有具有名为
trip
,属性的
trainID
元素
并且这个表达式
//trip/@trainID
选择
trainID
元素上的所有 trip
属性。
我也提到了这个答案。
问题原因:
我知道括号中的部分(即谓词)创建了一个过滤器。
我认为在没有对属性进行任何测试的情况下,所讨论的表达式可能会像上面的第三个表达式一样发挥作用。但它在我的测试中不起作用,并且在下面证实该表达式根本无效。
不,
//trip/[@trainID]
不是有效的 XPath。
就像你在标题中所说,谓词必须由节点测试进行。
来自 1.0 规范:
[4] Step ::= AxisSpecifier NodeTest Predicate* | AbbreviatedStep
NodeTest 定义为:
[7] NodeTest ::= NameTest | NodeType '(' ')' | 'processing-instruction' '(' Literal ')'