xslt - 仅针对 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
解决方案
恐怕你的意图并不明显。
如果您想从输出中排除元素,@Ajeet Singh 建议的空模板将是解决方案。
在 XSLT 中,模板规则仅适用于其 @match 属性的内容。
如果您想定义一种适用于除 p 内的外部参照之外的所有元素的全局模板,您还可以编写:
<xsl:template match="*[not(self::xref[parent::p])]">
** do something **
</xsl:template>