XPath谓词必须以节点测试开头?

时间:2017-08-24 22:52:47

标签: xml xpath

这是:

//trip/[@trainID]

有效的xpath表达式?

我已经意识到这一点:

//trip[@trainID]

选择所有trip元素,其属性名为trainID,并且:

//trip/@trainID

选择trainID元素上的所有trip属性。我还提到this answer

1 个答案:

答案 0 :(得分:0)

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

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

来自1.0 spec

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

将NodeTest定义为:

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