如何从soap msg中删除命名空间

时间:2018-03-14 09:59:55

标签: xml xslt soap

我需要将Soap Message转换为XML消息。 我有一个问题,得到正确的xml消息。

输入消息是:

<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <a1:mojkomunikat xmlns:a1="http://costam">
            <a1:message>
                <a1:msgHeader>
                </a1:msgHeader>
                <a1:msgData>
                    <a1:some>duzo danych</a1:some>
                </a1:msgData>
            </a1:message>
        </a1:mojkomunikat>
    </S:Body>
</S:Envelope>

输出消息为:

<?xml version="1.0" encoding="UTF-8"?>
<msg>
    <parameters>
        <parameter>
            <key>content</key>
            <value><![CDATA[<some>duzo danych</some>]]></value>
        </parameter>
    </parameters>
</msg>

我尝试使用这个变压器但不起作用。 我不幸的是,根元素仍然是命名空间:(

<xsl:stylesheet 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:a1="http://costam" 
        version="1.0">

    <xsl:template match="/">
        <msg>
            <parameters>
                <parameter>
                    <key>content</key>
                    <value><xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
                        <xsl:apply-templates select="//a1:msgData/*"/>
                    <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text></value>
                </parameter>
            </parameters>
        </msg>
    </xsl:template>

    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="node()|@*" />
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

但不起作用

我做错了什么? 感谢

1 个答案:

答案 0 :(得分:0)

exclude-result-prefixes中添加属性<xsl:stylesheet>。这可确保命名空间不会添加到输出中。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:a1="http://costam" version="1.0" exclude-result-prefixes="S a1">