如果我正在编写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>
在您的示例中,不,没有区别,我建议使用 <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
.
有一个区别,那就是使用文字结果元素 ( <a>
) 命名空间是从样式表中复制的,这不会发生在xsl:element
中。如果使用文本结果元素,则可能需要通过使用 exclude-result-prefixes
来阻止将不需要的命名空间复制到结果中。
有些人似乎习惯性地使用xsl:element而不是文字结果元素,我一直不明白为什么。有时是同一个人抱怨 XSLT 冗长。如果你静态地知道元素名称,我的习惯是每次都使用文字结果元素。