我对XSLT不太熟悉。我试图从根标签中删除xmlns命名空间,同时使用xslt保留其他标签,例如xmlns:xsd和xmlns:xsi。我从互联网上获得了一些帮助,以删除xmlns名称空间,但是该代码也正在删除xmlns:xsd。请帮忙。预先感谢。
这是我的xsl代码:
dist
这是我的输入xml:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"
xmlns:old="http://www.example.com" exclude-result-prefixes="old">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="old:*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
在输入XML上运行XSL时,我得到以下XML
<?xml version="1.0" encoding="UTF-8"?>
<Data xmlns="http://www.example.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://www.example.com/schemaLocation">
<name>abc</name>
<name>efg</name>
</Data>
所需的输出XML:
<?xml version="1.0" encoding="UTF-8"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/schemaLocation">
<name>abc</name>
<name>efg</name>
</Data>
答案 0 :(得分:0)
在XML文档中的任何地方都不会使用缺少的名称空间声明,因此您的处理器可以正确地丢弃它。
您可以尝试将其复制:
XSLT 1.0
<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="*"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@* | namespace::*[name()]"/>
<xsl:apply-templates select="node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
但并非所有处理器都会产生期望的结果(例如,Xalan不会)。