XSLT:<xsl:element name =“a”>和<a></a> </xsl:element>之间的区别

时间:2014-02-08 05:25:40

标签: xml xslt

如果我正在编写XSLT,那么

之间是否有任何区别
<xsl:template match="/*">
    <xsl:element name="a"><xsl:apply-templates/></xsl:element>
</xsl:template>

<xsl:template match="/*/y">
    <a><xsl:apply-templates/></a>
</xsl:template>

2 个答案:

答案 0 :(得分:4)

在你的例子中,没有,没有区别,我建议使用<a>版本,因为它更清晰,更简洁。

使用<xsl:element>的时间是指需要动态确定元素的名称,名称空间或两者,例如:

<xsl:for-each select="item">
   <xsl:element name="myNewItem{position()}">
     <xsl:value-of select="." />
   </xsl:element>
</xsl:for-each>

这会在输出中生成<myNewItem1><myNewItem2><myNewItem3>等。

如果在XSLT中预先确定了元素名称,那么通常更清楚,以避免xsl:element

答案 1 :(得分:3)

存在一个区别,即使用文字结果元素(<a>)从样式表复制名称空间,xsl:element不会发生这种情况。如果使用文字结果元素,则可能需要使用exclude-result-prefixes来阻止将不需要的名称空间复制到结果中。

有些人似乎习惯性地使用xsl:element而不是文字结果元素,我从来没有理解为什么。有时候抱怨XSLT冗长的人也是同样的人。如果您静态地知道元素名称,我的习惯是每次都使用文字结果元素。