至少有一個區別。鑑於以下輸入:
<root xmlns="htpp://www.example.com/my">my text</root>
這個模板:
<xsl:template match="/*">
<xsl:element name="{name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
會產生:
<root>my text</root>
而xsl:copy
將複製其命名空間的元素保留:
<root xmlns="htpp://www.example.com/my">my text</root>
編輯
在響應由@parakmiakos評論:
鑑於以下輸入:
<my:root xmlns:my="htpp://www.example.com/my">my text</my:root>
這個模板*:
<xsl:template match="/*">
<xsl:element name="{name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
會產生:
<my:root xmlns:my="htpp://www.example.com/my">my text</my:root>
(*)前提是在樣式表中聲明瞭「我的」前綴。
這個模板:
<xsl:template match="/*">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
會產生:
<root>my text</root>
這一個:
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
將返回:
<my:root xmlns:my="htpp://www.example.com/my">my text</my:root>
與第一個相同(但不必聲明前綴)。
我認爲通過使用name()而不是local-name(),他會保留名稱空間。 – parakmiakos
@parakmiakos http://xsltransform.net/6qM2e2b/1 –
有趣的是,我用的工具沒有這樣工作。 – parakmiakos