这种转变:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="{name()}" namespace="{namespace-uri()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="node()[not(self::*)]|@*">
<xsl:copy/>
</xsl:template>
<xsl:template match=
"@*[namespace-uri() = 'http://www.w3.org/2001/XMLSchema-instance']"/>
</xsl:stylesheet>
应用于以下 XML 文档时(未提供!):
<Publication
xmlns:n1="http://www.w3.org/2001/XMLSchema-instance"
n1:noNamespaceSchemaLocation="InformaKMSStructure.xsd">
<a x="y">
<b/>
</a>
<c/>
</Publication>
产生想要的正确结果:
<Publication>
<a x="y">
<b/>
</a>
<c/>
</Publication>
说明:
这遵循覆盖标识规则的通常模式,但是标识规则被两个模板替换——一个匹配任何元素,第二个匹配任何其他节点或属性。