XSLT:<apply-templates select =“...”>

时间:2016-10-14 15:59:08

标签: xslt apply-templates

我对<xsl:apply-templates>有疑问。

假设我有这样的XML(参见http://www.tei-c.org/release/doc/tei-p5-doc/en/html/ref-subst.html):

<transcription>
<subst>    
    <del>wrong</del>
    <add>right</add>
</subst>    
</transcription>

现在我想用XSLT以不同的方式处理这种转录录音。

如果我只想向用户提供更正,我可以使用这样的XSLT模板:

<xsl:template match="subst"><xsl:apply-templates select="./add"/></xsl:template>

<xsl:template match="subst/add"><xsl:apply-templates/></xsl:template>

但是,我也可以写:

<xsl:template match="subst"><xsl:apply-templates/></xsl:template>

<xsl:template match="subst/add"><xsl:apply-templates/></xsl:template>

<!-- del: ignore contents -->
<xsl:template match="subst/del"></xsl:template>

在第一种情况下,我明确仅在add内解决<subst>,忽略<del>

在第二种情况下,我通过提供一个不对元素做任何事情的模板来忽略<del>,从而产生相同的效果。

如果我没有记错的话,这两种方式是等价的。哪个更好?

1 个答案:

答案 0 :(得分:1)

恕我直言,根本不处理节点比使用空模板处理它们更可取。但有时替代方案更方便,例如出于代码可读性的原因。