正在从输出中删除命名空间



为了得到这个,我已经绞尽脑汁好几天了。。。但我似乎无法把最后的部分整理好。。。我在XSLT方面的技能并不存在,所以请耐心等待:-(

我的输入(或者至少是没有XSLT转换的输出(:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ORDERRESPONSE>
<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>

我有这个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()}">
<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>

这是我的输出:

<?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 xmlns="">
<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>

但是我如何摆脱xmlns="quot;???

这是我想要的输出:

<?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 xmlns="">
<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>

我想你想要的结果实际上是:

<?xml version="1.0" encoding="UTF-8"?>
<ORDERRESPONSE xmlns="http://www.opentrans.org/XMLSchema/2.1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Version="2.1">
<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>

正如我在对您的问题的评论中所提到的,要得到这个结果,您必须向所有处理过的元素添加一个命名空间,而不是删除它:

<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/>
</xsl:element>  
</xsl:template>
</xsl:stylesheet>

最新更新