由于 XSLT 1.0 没有<xsl:namespace>
XSLT 2.0 中的指令,我使用的技术是从我的样式表中复制这些节点:
输入:
t:\ftemp>type ns.xml
<application xmlns="http://someurl">
<Detail1/>
<Detail2>
<Property/>
</Detail2>
</application>
执行:
t:\ftemp>call xslt ns.xml ns.xsl
<?xml version="1.0" encoding="utf-8"?><application xmlns="http://someurl" xmlns:
xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchem
a-instance">
<Detail1/>
<Detail2>
<Property/>
</Detail2>
</application>
样式表:
t:\ftemp>type ns.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0">
<xsl:template match="/*">
<xsl:copy>
<xsl:copy-of select="document('')/*/namespace::xs"/>
<xsl:copy-of select="document('')/*/namespace::xsi"/>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()"><!--identity for all other nodes-->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
t:\ftemp>