我有以下带有 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 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>