首页 > 解决方案 > 仅针对 XSLT 中的特定元素应用模板

问题描述

我有一个输入输出,我只想为特定元素应用模板。

输入:

<p>patagaram 1<italic>weas</italic>(<xref ref-type="bibr" rid="R3"><italic>3</italic></xref>) (<xref ref-type="fig" rid="F1">Figures 1</xref> and <xref ref-type="fig" rid="F2">2</xref>).</p>

试过的代码:

<p type="{$type}">
        <xsl:if test="$id">
            <xsl:attribute name="id" select="$id"/>
        </xsl:if>
        <xsl:apply-templates select="p"/>

我想要的是:

我想应用模板,除了xref[@ref-type='fig']里面的p。我怎样才能做到这一点。

我正在使用 XSLT 2.0

标签: xslt

解决方案


恐怕你的意图并不明显。

如果您想从输出中排除元素,@Ajeet Singh 建议的空模板将是解决方案。

在 XSLT 中,模板规则仅适用于其 @match 属性的内容。

如果您想定义一种适用于除 p 内的外部参照之外的所有元素的全局模板,您还可以编写:

<xsl:template match="*[not(self::xref[parent::p])]"> ** do something ** </xsl:template>


推荐阅读