从 xml 中删除 SOAP 信封

问题描述 投票:0回答:1

我有以下带有 SOAP 信封的输入 XML,需要删除输出 xml 中的肥皂信封。

<?xml version="1.0" encoding="UTF-8"?>
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP-ENV:Body>
    <Messages xmlns="http://web.ui.com">
        <result failed="0" scheduled="0" sent="1">
            <Details limit="4" rem="2" type="ys"/>
        </result>
    </Messages>
   </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>

我使用了下面的 XSLT 代码,但它没有给出预期的输出

<?xml version="1.0" encoding="UTF-8"?>
   <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns="http://web.ui.com"
            version="1.0">
       <xsl:output method="xml" indent="yes"/>
     <xsl:template match="/SOAP-ENV:Envelope">
      <xsl:apply-templates select="SOAP-ENV:Body/*"/>
    </xsl:template>
     <xsl:template match="SOAP-ENV:Body">
       <xsl:apply-templates select="*"/>
      </xsl:template>
       <xsl:template match="*">
        <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
   </xsl:template>
   <xsl:template match="@*">
    <xsl:copy/>
    </xsl:template>
 </xsl:stylesheet>

预期产量

    <?xml version="1.0" encoding="UTF-8"?>
    <Messages xmlns="http://web.ui.com">
        <result failed="0" scheduled="0" sent="1">
            <Details limit="4" rem="2" type="ys"/>
        </result>
       </Messages>

因此,无论消息节点内的字段和节点如何,代码都应该正常工作。

xslt xslt-1.0 xslt-2.0
1个回答
0
投票

XSLT 2.0 中,您可以简单地执行以下操作:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/SOAP-ENV:Envelope">
    <xsl:copy-of select="SOAP-ENV:Body/*" copy-namespaces="no"/>
</xsl:template>

</xsl:stylesheet>
© www.soinside.com 2019 - 2024. All rights reserved.