我有一个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
类包含一个title
元素和一个outputclass
的{{1}}时。 / p>
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>
语句之后添加了| *[contains(title/@outputclass, 'noNum')]
,以为这是附加条件,在这种情况下,not
调用将在模板被调用时跳过(例如 ...不是具有[criteria]的祖先或自身或标题输出类属性为'noNum'...的主题)。但是,看来我添加的条件被视为模板匹配并可以计数的内容。
假设我在最后一点上是正确的,我相信我需要将该条件放在它自己的“ not”语句中,但是我不确定如何使用XPath中已经存在的条件来做到这一点。 / p>
答案 0 :(得分:3)
在XPath |
中,是一组 union运算符,而不是逻辑或。
|
|
运算符计算其操作数的并集,该操作数必须是节点集。
union
和|
运算符是等效的。它们以两个节点序列作为操作数,并返回一个序列,其中包含在两个操作数中出现的所有节点。
or
使用or
代替logical OR。
将其细分为较小的部分:
//*[contains(@class, ' bookmap/chapter ')]
是否选择您期望的内容?分别对逻辑表达式的每个最基本部分重复 。
将那些经过单独验证的术语或谓词组合起来,一次一次,并观察到这一过程中的每一步都没有意外。
在合并其他条款之前,请修复预期结果与实际结果之间的所有差异。