XPath 中的逻辑或?为什么不是 |在职的?

Logical OR in XPath? Why isn't | working?

我有一个 XSLT 模板,它计算所有级别的主题,用于在我的 DITA 项目中用编号标记这些主题。

<xsl:template match="*[contains(@class, ' bookmap/chapter ')] | *[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')])]" mode="topicTitleNumber"> 
    <xsl:number format="1 " count="*[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')])] | *[contains(@class, ' bookmap/chapter ')]" level="multiple"/> 
</xsl:template> 

我正在尝试为计算的内容添加额外的排除项,因为当 topicref class 具有 title 元素且 outputclassnoNum.

<xsl:template match="*[contains(@class, ' bookmap/chapter ')] | *[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')])]" mode="topicTitleNumber"> 
    <xsl:number format="1 " count="*[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')] | *[contains(title/@outputclass, 'noNum')])] | *[contains(@class, ' bookmap/chapter ')]" level="multiple"/> 
</xsl:template> 

如上所示,我在第一个 not 语句之后添加了 | *[contains(title/@outputclass, 'noNum')],认为这将起到附加条件的作用,其中 count 调用将在调用模板时跳过(即 ...不是具有 [criteria] 的 ancestor-or-self 或标题输出 class 属性为 'noNum' 的主题...)。但是,我添加的条件似乎被视为模板 确实 匹配并计数的内容。

假设我在最后一点上是正确的,我相信我需要将该条件放在它自己的 'not' 语句中,但我不确定如何使用已经存在的条件来做到这一点XPath。

在 XPath 中 | 是集合 联合运算符,不是逻辑或。

联合运算符,|

XPath 1.0

The | operator computes the union of its operands, which must be node-sets.

XPath 2.0+

The union and | operators are equivalent. They take two node sequences as operands and return a sequence containing all the nodes that occur in either of the operands.


逻辑或,or

使用 or 代替 logical OR


复杂的 XPath 仍然不起作用?

将其分解为更小的部分:

  1. //*[contains(@class, ' bookmap/chapter ')]select是否如您所愿?对逻辑表达式的每个最基本部分重复 单独

  2. 结合那些单独验证过的术语或谓词,一次一个,观察沿途的每一步,没有惊喜。

  3. 在组合附加项之前修复预期结果与实际结果之间的任何差异。