XSLT - 将命名空间添加到节点 XML

XSLT - Add namespace to node XML

我有一个简单的 XML:

<RequestResponse>
    <RequestResult>
        <FinalResponse>
            <Message>Request inserted successfully.</Message>
            <Response>true</Response>
        </FinalResponse>
    </RequestResult>
</RequestResponse>

我使用 XSLTFinalResponse 包含到 CDATA (字符串)中:

<RequestResponse>    
    <RequestResult>
        <![CDATA[<FinalResponse>      
                <Message>Request inserted successfully.</Message>
                <Response>true</Response>   
        </FinalResponse>]]>
    </RequestResult>   
</RequestResponse>

然后我使用另一个 XSLT more 将 XML 转换为 SOAP 以及我想要的命名空间:

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <RequestResponse>
            <RequestResult>
                <![CDATA[
                <FinalResponse>
                <Message>Request inserted successfully.</Message>
                <Response>true</Response>
                </FinalResponse>
                ]]>
            </RequestResult>
        </RequestResponse>
    </s:Body>
</s:Envelope>

我需要将此 tag/namespace: xmlns="http://tempuri.org/" 添加到 RequestResponse 节点,但 该节点如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <RequestResponse xmlns="http://tempuri.org/">
            <RequestResult>
                <![CDATA[
                <FinalResponse>
                <Message>Request inserted successfully.</Message>
                <Response>true</Response>
                </FinalResponse>
                ]]>
            </RequestResult>
        </RequestResponse>
    </s:Body>
</s:Envelope>

如何才能将该元素仅添加到该节点?

XSLT 样式表(http://xsltransform.net/bwdws2)

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:output cdata-section-elements="RequestResult" xmlns="http://tempuri.org/"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="RequestResponse | RequestResponse//*">
        <xsl:element name="{name()}" namespace="http://tempuri.org/">
          <xsl:apply-templates select="@* | node()"/>            
        </xsl:element>
    </xsl:template>

</xsl:transform>

变换

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <RequestResponse>
            <RequestResult>
                <![CDATA[
                <FinalResponse>
                <Message>Request inserted successfully.</Message>
                <Response>true</Response>
                </FinalResponse>
                ]]>
            </RequestResult>
        </RequestResponse>
    </s:Body>
</s:Envelope>

进入

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <RequestResponse xmlns="http://tempuri.org/">
            <RequestResult><![CDATA[

                <FinalResponse>
                <Message>Request inserted successfully.</Message>
                <Response>true</Response>
                </FinalResponse>

            ]]></RequestResult>
        </RequestResponse>
    </s:Body>
</s:Envelope>