2016-11-11 3 views
0

Ich habe ein einfach XML:XSLT - Hinzufügen Namensraum XML zum Knoten

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

ich ein XSLT verwenden FinalResponse in eine CDATA (String) enthalten:

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

Dann benutze ich ein anderes XSLT mehr, um die XML zu SOAP mit dem Namespace zu konvertieren Ich möchte:

<?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> 

Ich brauche diesen tag/Namespace hinzuzufügen: xmlns="http://tempuri.org/" zum RequestResponse Knoten, aber nur diesen Knoten wie folgt aus:

<?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> 

Wie kann ich dieses Element hinzufügen nur zu diesem Knoten?

+0

Sie mißverstehen, wie Namespaces arbeiten. In Ihrer Ausgabe erbt das RequestResult-Element den Standard-Namespace, der für sein übergeordnetes RequestResponse-Element deklariert wurde. Sie müssen beide Elemente in demselben Namespace platzieren, nicht nur das übergeordnete Element. –

Antwort

2

Das XSLT-Stylesheet (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> 

verwandelt

<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> 

in

<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> 
+0

Ich versuche mit Ihrer xsl-Umwandlung, aber es fügt die CDATA nicht hinzu. Bitte, lesen Sie meine Antwort unter – gtx911

+0

Ich habe es endlich, die Reihenfolge der Transformation ändern. Vielen Dank – gtx911