我对<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>
,从而产生相同的效果。
如果我没有记错的话,这两种方式是等价的。哪个更好?
答案 0 :(得分:1)
恕我直言,根本不处理节点比使用空模板处理它们更可取。但有时替代方案更方便,例如出于代码可读性的原因。