使用 XSLT 删除命名空间
Removing namespace using XSLT
我正在从 MuleSoft 生成 XML 文件,它会生成这样的空标签。如何使用 XSLT
删除它
<SerialNumber xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
我试过像这样的 XSLT 代码,
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name(.)}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@*[local-name(.)='noNamespaceSchemaLocation']"/>
</xsl:stylesheet>
它产生的输出类似于 <SerialNumber nil="true"/>
我想删除整个命名空间,输出应该类似于 <SerialNumber/>
如何使用 XSLT 实现此目的?
提前致谢
如果要删除该属性,请添加 <xsl:template match="@xsi:nil" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
。
I am generating XML file from MuleSoft and it producing empty tags
like this. How to remove this using XSLT
<SerialNumber xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
这个变换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*[not(name()='xsi:nil')]"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
在提供的 XML 文档上应用时:
<SerialNumber xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
产生想要的正确结果:
<SerialNumber/>
甚至可以使用更短的:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name()}"/>
</xsl:template>
</xsl:stylesheet>
我正在从 MuleSoft 生成 XML 文件,它会生成这样的空标签。如何使用 XSLT
删除它<SerialNumber xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
我试过像这样的 XSLT 代码,
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name(.)}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@*[local-name(.)='noNamespaceSchemaLocation']"/>
</xsl:stylesheet>
它产生的输出类似于 <SerialNumber nil="true"/>
我想删除整个命名空间,输出应该类似于 <SerialNumber/>
如何使用 XSLT 实现此目的?
提前致谢
如果要删除该属性,请添加 <xsl:template match="@xsi:nil" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
。
I am generating XML file from MuleSoft and it producing empty tags like this. How to remove this using XSLT
<SerialNumber xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
这个变换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*[not(name()='xsi:nil')]"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
在提供的 XML 文档上应用时:
<SerialNumber xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
产生想要的正确结果:
<SerialNumber/>
甚至可以使用更短的:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name()}"/>
</xsl:template>
</xsl:stylesheet>