如何将apply-templates应用于除特定模板之外的所有模板

8
在下面的代码中,我正在将所有模板应用于章节元素(在代码末尾),但我想知道如何将所有模板应用于此元素,除了特定的一个。 在这种情况下,它是标题元素,因为我已经在前一行中选择它,并且它在html文件中重复出现。 有人可以帮忙吗?
<xsl:template match="chapter">
    <h3>
       <a name="{@id}"><xsl:value-of select="title"/></a>
    </h3>
    <xsl:apply-templates/>
</xsl:template>

输出:

<h3>Title</h3>
Title<br>
Text.
1个回答

14

一个简单的 <xsl:apply-templates/> 等同于 <xsl:apply-templates select="node()" />,即所有子节点。您可以使用 XPath 2.0 的 except 运算符 来排除某些节点,例如:

<xsl:apply-templates select="node() except title" />

这将选择所有子节点,除了名称为title的元素。如果你只对子元素(而非文本节点等)感兴趣,则可以使用* except title

except运算符实现了集合差异 - 右侧不仅限于简单的元素名,您可以使用任何返回节点序列的表达式,例如:

node() except (title | div[@class = 'heading'])

X except Y 选取所有在 X 所选节点序列中的节点,但不包括 同时也在 Y 所选节点序列中的节点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接