XPath 中运算符的优先级是什么?

Cli*_*int 4 xml xpath operator-precedence associativity

在此 XPath 表达式: 中//div[@id=\xe2\x80\x9dmyID\xe2\x80\x9d]|p//运算符是否应用于并集运算符的两侧?或者这个表达式只是返回div文档中id属性值为myID和 all的所有元素p作为上下文节点的子元素的所有元素吗?

\n\n

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

\n

kjh*_*hes 6

XPath 运算符顺序优先级

\n\n

XPath EBNF 语法暗示了运算符之间的以下优先级(从最低到最高):

\n\n

在此输入图像描述

\n\n

来源XML 路径语言 (XPath) 2.0(第二版)

\n\n

(另请参阅:XML 路径语言 (XPath) 3.0

\n\n
\n\n

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

\n\n
//div[@id=\xe2\x80\x9dmyID\xe2\x80\x9d]|p\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

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

\n

  • 补充一下,在 XPath 1.0 中没有这样的表,但优先级是由语法隐式定义的。例如,产生式 `[21] AdditiveExpr ::= MultiplicativeExpr ( ("+" | "-") MultiplicativeExpr )*` 和 `[22] MultiplicativeExpr ::= UnionExpr ( ("*" | "div" | "idiv") | "mod") UnionExpr )*` 告诉我们“+”的操作数可以包含“*”或“div”运算符,但反之则不然。 (4认同)