将 OR 推入节点检查
Pushing an OR into the node check
要在两个不同的节点上执行 OR
,我可以执行以下操作:
//C:Year[not(@value="2019")] | //R:Year[not(@value="2019")]
然而,如果有一个长表达式,这会变得有点笨拙,尤其是当有超过 2 个 OR 时。有没有办法做类似下面的事情:
//(C:Year or R:Year)[not(@value="2019")]
基本上,是否可以在节点测试本身中放置一个 OR
,而不是评估完整的 axis-node-predicate
表达式并对整个内容进行 OR 运算。
这(仅)适用于 XPath 2.0+
//(C:Year | R:Year)[not(@value="2019")]
但是,不幸的是,不在 XPath 1.0 中。
W3C XPath 1.0 language reference 3.1 下的状态:
Parentheses may be used for grouping.
[14] Expr ::= OrExpr
[15] PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | FunctionCall
然而 /steps/
(*StepExpr
) 没有提到。
但是 XPath 2.0 参考指出:
Parentheses must be used when "/
" is used on the left hand side of
an operator, as in "(/) * 5
".
有了这个提示,我想出了这个也适用于 XPath 1.0 的查询:
((//C:Year)|(//C:Year))[not(@value="2019")]
因此,v2+ 更灵活,但适用相同的原则。 Gustafson、M. Kay 和其他人讨论了 XPath 2.0 bug long this lines leading to Errata XP.E3。 D.张伯伦:
On July 31, 2007, the Query and XSLT working groups agreed to add
parentheses to the expansions of leading-/ and leading-// in path
expressions, as suggested by this bug report. The revised expansions
will appear in a future errata document. Regards, Don Chamberlin (for
the joint working groups)
要在两个不同的节点上执行 OR
,我可以执行以下操作:
//C:Year[not(@value="2019")] | //R:Year[not(@value="2019")]
然而,如果有一个长表达式,这会变得有点笨拙,尤其是当有超过 2 个 OR 时。有没有办法做类似下面的事情:
//(C:Year or R:Year)[not(@value="2019")]
基本上,是否可以在节点测试本身中放置一个 OR
,而不是评估完整的 axis-node-predicate
表达式并对整个内容进行 OR 运算。
这(仅)适用于 XPath 2.0+
//(C:Year | R:Year)[not(@value="2019")]
但是,不幸的是,不在 XPath 1.0 中。
W3C XPath 1.0 language reference 3.1 下的状态:
Parentheses may be used for grouping.
[14] Expr ::= OrExpr [15] PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | FunctionCall
然而 /steps/
(*StepExpr
) 没有提到。
但是 XPath 2.0 参考指出:
Parentheses must be used when "
/
" is used on the left hand side of an operator, as in "(/) * 5
".
有了这个提示,我想出了这个也适用于 XPath 1.0 的查询:
((//C:Year)|(//C:Year))[not(@value="2019")]
因此,v2+ 更灵活,但适用相同的原则。 Gustafson、M. Kay 和其他人讨论了 XPath 2.0 bug long this lines leading to Errata XP.E3。 D.张伯伦:
On July 31, 2007, the Query and XSLT working groups agreed to add parentheses to the expansions of leading-/ and leading-// in path expressions, as suggested by this bug report. The revised expansions will appear in a future errata document. Regards, Don Chamberlin (for the joint working groups)