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