...">

Convert XSLT from SOAP

I have an incoming SOAP message as shown below:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns3:GetImageResponse xmlns="urn:webservice/server/mobile/shoebox/types/v1/CustomImage" xmlns:ns2="urn:webservice/server/mobile/shoebox/types/v1/common/ShoeboxCommonArtifacts" xmlns:ns3="urn:webservice/server/mobile/shoebox/types/v1/Image" xmlns:ns4="urn:webservice/server/mobile/shoebox/types/v1/common/exceptions" xmlns:ns5="urn:webservice/server/mobile/shoebox/types/v1/GetThumbnailImage">
<ns3:returnCode>105</ns3:returnCode>
<ns3:errorText>Invalid Participant code/id.</ns3:errorText>
<ns3:shoeboxImage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</ns3:GetImageResponse>
</soap:Body>
</soap:Envelope>


We need to convert it to another simple XML, such as Below: (Constraint is the root element under the BODY of the SOAP envelope (for example, "GetImageResponse") we need to build the "GetImage" element in the XML output file), and it is not constant to be any element. Therefore, you need to build XML based on the root element under BODY, Ex, shown below)

<?xml version="1.0" encoding="UTF-8"?>
<tns:GetImage xmlns:bons1="http://highmark.com/rbssvc/messages/common" xmlns:tns="http://www.example.org/GetImageResponseMessage/" xmlns:tns1="http://www.example.org/GetImageResponse/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/GetImageResponseMessage/ ../xsd/GetImageResponseMessage.xsd ">

 <payload>
    <returnCode>returnCode</returnCode>
    <errorText>errorText</errorText>
    <imageData>MA==</imageData>
  </payload>

I use this below XSLT to convert:

<xsl:stylesheet extension-element-prefixes="dp" exclude-result-prefixes="dp regex" version="1.0" xmlns:dp="http://www.datapower.com/extensions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:regex="http://exslt.org/regular-expressions">
   <xsl:template match="/">
      <GetImage>
         <xsl:element name="{'Payload'}">
            <xsl:copy-of select="/*/*[local-name()='Body']/*[local-name()='GetImageResponse']/*"/>
         </xsl:element>
      </GetImage>
   </xsl:template>
</xsl:stylesheet>

But I do not get the desired XML output shown above

The output that I get is:

<GetImageResponse>
   <Payload>
      <ns3:returnCode xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns5="urn:webservice/server/mobile/shoebox/types/v1/GetThumbnailImage" xmlns:ns4="urn:webservice/server/mobile/shoebox/types/v1/common/exceptions" xmlns:ns3="urn:webservice/server/mobile/shoebox/types/v1/Image" xmlns:ns2="urn:webservice/server/mobile/shoebox/types/v1/common/ShoeboxCommonArtifacts" xmlns="urn:webservice/server/mobile/shoebox/types/v1/CustomImage">105</ns3:returnCode>
      <ns3:errorText xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns5="urn:webservice/server/mobile/shoebox/types/v1/GetThumbnailImage" xmlns:ns4="urn:webservice/server/mobile/shoebox/types/v1/common/exceptions" xmlns:ns3="urn:webservice/server/mobile/shoebox/types/v1/Image" xmlns:ns2="urn:webservice/server/mobile/shoebox/types/v1/common/ShoeboxCommonArtifacts" xmlns="urn:webservice/server/mobile/shoebox/types/v1/CustomImage">Invalid Participant code/id.</ns3:errorText>
      <ns3:shoeboxImage xsi:nil="true" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns5="urn:webservice/server/mobile/shoebox/types/v1/GetThumbnailImage" xmlns:ns4="urn:webservice/server/mobile/shoebox/types/v1/common/exceptions" xmlns:ns3="urn:webservice/server/mobile/shoebox/types/v1/Image" xmlns:ns2="urn:webservice/server/mobile/shoebox/types/v1/common/ShoeboxCommonArtifacts" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:webservice/server/mobile/shoebox/types/v1/CustomImage"/>
   </Payload>
</GetImageResponse>

The problem is here, as if I cannot copy the namespace of the incoming soap message. Like the GetImageResponse element, as well as some additional namespace for the payload element.enter code here

, SOAP XML.

.

Rj

0
2

, xmlns - , . , , xmlns . : <GetImage>.

, GetImage , XSLT, .

:

<!-- 
     namespace GetImage and 
     set up additional namespace mapping for ns5 prefix
     for any copied elements which may be injected 
 -->
<tns:GetImage xmlns:tns="tns-uri" xmlns:ns5="ns5-uri">
    <!-- more stuff here -->
</tns:GetImage>

<xsl:element name="{'Payload'}"> . namespace xsl:, (URI), {prefix}:{local-name} name xmlns:prefix.

:

<xsl:element name="foo" namespace="bar"/>
<!-- needs xmlns:ns declaration -->
<xsl:element name="ns:foo"/>
<!--  substantially the same, using 'expressions' instead of 'literals' -->
<xsl:element name="{$nsPrefix}:{local-name()}">
0

. , - :

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns3="urn:webservice/server/mobile/shoebox/types/v1/Image" 
xmlns:my="http://www.example.com/my"
exclude-result-prefixes="soap ns3 my">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<my:ns-holder xmlns:bons1="http://highmark.com/rbssvc/messages/common" xmlns:tns1="http://www.example.org/GetImageResponse/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/GetImageResponseMessage/ ../xsd/GetImageResponseMessage.xsd "/>

<xsl:template match="/soap:Envelope/soap:Body/*">
    <xsl:element name="tns:{local-name()}" xmlns:tns="http://www.example.org/GetImageResponseMessage/">
        <xsl:copy-of select="document('')/xsl:stylesheet/my:ns-holder/namespace::*"/>
        <payload>
            <returnCode>
                <xsl:value-of select="ns3:returnCode" />
            </returnCode>
            <errorText>
                <xsl:value-of select="ns3:errorText" />
            </errorText>
            <imageData>MA==</imageData>
        </payload>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

:

  • , soap:Body, tns: "http://www.example.org/GetImageResponseMessage/' . , , .

  • . , - .

  • . , xsl:copy here, node namespace (ns3 ).

, :

<?xml version="1.0" encoding="UTF-8"?>
<tns:GetImageResponse xmlns:tns="http://www.example.org/GetImageResponseMessage/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns3="urn:webservice/server/mobile/shoebox/types/v1/Image" xmlns:my="http://www.example.com/my" xmlns:bons1="http://highmark.com/rbssvc/messages/common" xmlns:tns1="http://www.example.org/GetImageResponse/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <payload>
      <returnCode>105</returnCode>
      <errorText>Invalid Participant code/id.</errorText>
      <imageData>MA==</imageData>
   </payload>
</tns:GetImageResponse>

:

  • GetImageResponse GetImage;
  • imageData ( "MA ==" ).
0

Source: https://habr.com/ru/post/1612648/


All Articles