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

问题描述 投票:0回答:1

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

//trip/[@trainID]

我已经发现这个表达了

//trip[@trainID]

选择所有具有名为

trip
,
 属性的 
trainID

元素

并且这个表达式

//trip/@trainID

选择

trainID
元素上的所有
trip
属性。

我也提到了这个答案

问题原因:

我知道括号中的部分(即谓词)创建了一个过滤器。
我认为在没有对属性进行任何测试的情况下,所讨论的表达式可能会像上面的第三个表达式一样发挥作用。但它在我的测试中不起作用,并且在下面证实该表达式根本无效。

xml xpath
1个回答
0
投票

不,

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

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

来自 1.0 规范

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

NodeTest 定义为:

[7]       NodeTest       ::=      NameTest    
                                 | NodeType '(' ')'   
                                 | 'processing-instruction' '(' Literal ')'
© www.soinside.com 2019 - 2024. All rights reserved.