使用 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>