如何移除XSLT转换输出中的xmlns=""命名空间声明?
解决XML转换中的空命名空间声明问题
问题根源
你的XSLT里,根节点<ORDERRESPONSE>被放到了http://www.opentrans.org/XMLSchema/2.1命名空间,但处理其他元素的通用模板只创建了无命名空间的元素——因为<xsl:element>没指定namespace属性。父节点在目标命名空间,子元素要保持无命名空间就会自动加上xmlns="",这就是问题所在。
修复方案
修改通用元素模板,让所有子元素都使用目标命名空间,两种方法可选:
方法1:直接指定命名空间
在创建元素时显式写入目标命名空间:
<xsl:element name="{local-name()}" namespace="http://www.opentrans.org/XMLSchema/2.1"> <xsl:apply-templates select="@* | node()"/> </xsl:element>
方法2:继承父节点命名空间
通过父节点的命名空间URI动态指定:
<xsl:element name="{local-name()}" namespace="{namespace-uri(..)}"> <xsl:apply-templates select="@* | node()"/> </xsl:element>
完整修改后的XSLT
<?xml version="1.0"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="ORDERRESPONSE"> <ORDERRESPONSE xmlns="http://www.opentrans.org/XMLSchema/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="2.1"> <xsl:apply-templates/> </ORDERRESPONSE> </xsl:template> <xsl:template match="*"> <xsl:element name="{local-name()}" namespace="http://www.opentrans.org/XMLSchema/2.1"> <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="comment() | text() | processing-instruction()"> <xsl:copy copy-namespaces="no"/> </xsl:template> </xsl:stylesheet>
输出验证
用上面的XSLT转换你的输入XML,就能得到符合预期的结果,子元素不会再带xmlns=""声明:
<?xml version="1.0" encoding="utf-8"?> <ORDERRESPONSE Version="2.1" xmlns="http://www.opentrans.org/XMLSchema/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ORDERRESPONSE_HEADER> <ORDERRESPONSE_INFO> <ORDER_ID>65913603</ORDER_ID> <ORDERRESPONSE_DATE>2022-06-03</ORDERRESPONSE_DATE> <SUPPLIER_ORDER_ID>800332043</SUPPLIER_ORDER_ID> </ORDERRESPONSE_INFO> </ORDERRESPONSE_HEADER> </ORDERRESPONSE>
内容的提问来源于stack exchange,提问作者Jesper Bloch-Hansen
相关产品推荐
相关产品推荐

