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

时间:2015-01-08 19:06:44

标签: xslt xslt-2.0

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

答案 0 :(得分:12)

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

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

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

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

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

X except Y选择X 选择的序列中的所有节点,而不是{/ 1}} 选择的序列