如果我正在编写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>
答案 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冗长的人也是同样的人。如果您静态地知道元素名称,我的习惯是每次都使用文字结果元素。