如何 apply-templates 除特定模板外的所有模板

How to apply-templates to all templates except a spefic one

在下面的代码中,我将所有模板应用到元素章节(在代码的末尾),但我想知道如何将所有模板应用到这个元素,除了一个特定的.在本例中,它是元素标题,因为我已经在之前的行中选择了它,并且它在 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.

普通的<xsl:apply-templates/>相当于<xsl:apply-templates select="node()" />,即所有子节点。您可以使用 XPath 2.0 except operator 排除某些节点,例如

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

这将 select 所有子节点 除了 那些名称为 title 的元素。如果您只对子 元素 (不是文本节点等)感兴趣,那么您可以使用 * except title 代替。

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

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

X except Y selects 由 X 编辑的 select 序列中的所有节点 而不是 中的所有节点由 Y

编辑的序列 select