【问题标题】:What is the precedence among operators in XPath?XPath 中运算符之间的优先级是什么?
【发布时间】:2016-04-24 22:09:27
【问题描述】:

在这个 XPath 表达式://div[@id=”myID”]|p 中,// 运算符是否应用于联合运算符的两侧?或者这个表达式是否会简单地返回文档中所有id 属性值为myIDdiv 元素以及作为上下文节点子级的所有p 元素?

是否有 XPath 运算符绑定和关联性的参考?

【问题讨论】:

  • 这两个部分都作为独立的 Xpathes 执行。所以你必须写//p

标签: xml xpath operator-precedence associativity


【解决方案1】:

XPath 运算符顺序优先级

XPath EBNF grammar 表示运算符之间的以下优先级(从最低到最高):

来源XML Path Language (XPath) 2.0 (Second Edition)

(另见:XML Path Language (XPath) 3.0


由于//[] 的优先级高于|(联合),因此您的XPath 表达式

//div[@id=”myID”]|p

  • 选择文档中具有@id属性值的所有div元素 等于myID
  • 并选择所有属于上下文元素子级的p 元素,
  • 并取这两组元素的并集

产生最终结果(正如您在第二次解释中所预期的那样)。

【讨论】:

  • 只是补充一点,在 XPath 1.0 中没有这样的表,但优先级由语法隐式定义。例如产生式[21] AdditiveExpr ::= MultiplicativeExpr ( ("+" | "-") MultiplicativeExpr )*[22] MultiplicativeExpr ::= UnionExpr ( ("*" | "div" | "idiv" | "mod") UnionExpr )* 告诉我们“+”的操作数可以包含“*”或“div”运算符,反之则不行。
猜你喜欢
  • 2017-10-13
  • 2011-10-25
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多