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
元素且 outputclass
为 noNum
.
<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 中 |
是集合 联合运算符,不是逻辑或。
联合运算符,|
The |
operator computes the union of its operands, which must be node-sets.
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 仍然不起作用?
将其分解为更小的部分:
//*[contains(@class, ' bookmap/chapter ')]
select是否如您所愿?对逻辑表达式的每个最基本部分重复 单独 。
结合那些单独验证过的术语或谓词,一次一个,观察沿途的每一步,没有惊喜。
在组合附加项之前修复预期结果与实际结果之间的任何差异。
我有一个 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
元素且 outputclass
为 noNum
.
<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 中 |
是集合 联合运算符,不是逻辑或。
联合运算符,|
The
|
operator computes the union of its operands, which must be node-sets.
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 仍然不起作用?
将其分解为更小的部分:
//*[contains(@class, ' bookmap/chapter ')]
select是否如您所愿?对逻辑表达式的每个最基本部分重复 单独 。结合那些单独验证过的术语或谓词,一次一个,观察沿途的每一步,没有惊喜。
在组合附加项之前修复预期结果与实际结果之间的任何差异。