我想删除所有节点中的命名空间,但是在根节点中保留命名空间。
你知道我该怎么办?
我正在使用这个XSLT,但它正在删除所有节点中的命名空间。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" version="1.0" encoding="UTF-8" />
<xsl:template match="*">
<xsl:element name="{local-name()}" >
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
提前致谢。
答案 0 :(得分:2)
将元素保留在其命名空间中的简单方法是复制:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- remove namespaces -->
<xsl:template match="*">
<xsl:element name="{local-name()}" >
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<!-- keep namespace of root element -->
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
请注意,这不会处理属性(您的版本也不会)。
答案 1 :(得分:-1)
你的第一种方法似乎很适合我。你只需要:
<xsl:template match="/*">
<xsl:element name="{name()}" >
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rootns="..." >