0

I'm trying to convert the SOAP XML to XML using an XSL however I've been looking at this for far too long and can't work out how I'm going wrong. Any ideas?

SOAP 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:ns1="https://XXX.disclosures.co.uk/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
      <ns1:InitiateApplicationResponse>
         <InitiateApplicationResponse>
            <Application>
               <ApplicantReferenceNumber>580064065</ApplicantReferenceNumber>
               <Forename>SEASHELLS</Forename>
               <Surname>OSEAS</Surname>
               <InitiateStatus>SUCCESS</InitiateStatus>
               <Error />
               <StatusCode>202</StatusCode>
               <StatusDescription>e-Invitation Sent</StatusDescription>
               <TransactionReferenceNumber>202201310003</TransactionReferenceNumber>
            </Application>
         </InitiateApplicationResponse>
      </ns1:InitiateApplicationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0">
   <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="https://XXX.disclosures.co.uk/"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <SOAP-ENV:Body>
         <xsl:template match="ns1:InitiateApplicationResponse">
            <xsl:for-each select="Application">
               <EXCHANGE>
                  <SPD>
                     <SPD.SRS>
                        <SPD_STUC.SPD.SRS>
                           <xsl:value-of select="ApplicantReferenceNumber" />
                        </SPD_STUC.SPD.SRS>
                        <SPD_SEQN.SPD.SRS>CRB</SPD_SEQN.SPD.SRS>
                        <SPD_UDF1.SPD.SRS>
                           <xsl:value-of select="TransactionReferenceNumber" />
                        </SPD_UDF1.SPD.SRS>
                     </SPD.SRS>
                  </SPD>
               </EXCHANGE>
            </xsl:for-each>
         </xsl:template>
      </SOAP-ENV:Body>
   </SOAP-ENV:Envelope>
</xsl:stylesheet>

Trying to convert to this XML using the above SOAP and XSL

<?xml version="1.0" encoding="UTF-8"?>
<EXCHANGE>
   <SPD>
      <SPD.SRS>
         <SPD_STUC.SPD.SRS>580064065</SPD_STUC.SPD.SRS>
         <SPD_SEQN.SPD.SRS>CRB</SPD_SEQN.SPD.SRS>
         <SPD_UDF1.SPD.SRS>202201310003</SPD_UDF1.SPD.SRS>
      </SPD.SRS>
   </SPD>
</EXCHANGE>
awall
  • 13
  • 2
  • Please post the output that you are actually getting...or at least say what happens when you process the input XML using your current stylesheet. – kimbert Feb 01 '22 at 18:29
  • Take a look on how to deal with namespaces in xsl. I.e. this answer https://stackoverflow.com/a/1730947/3710053 – Siebe Jongebloed Feb 01 '22 at 18:43

2 Answers2

0

Please try the following XSLT.

XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml" encoding="utf-8"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="Application">
        <EXCHANGE>
            <SPD>
                <SPD.SRS>
                    <SPD_STUC.SPD.SRS>
                        <xsl:value-of select="ApplicantReferenceNumber"/>
                    </SPD_STUC.SPD.SRS>
                    <SPD_SEQN.SPD.SRS>CRB</SPD_SEQN.SPD.SRS>
                    <SPD_UDF1.SPD.SRS>
                        <xsl:value-of select="TransactionReferenceNumber"/>
                    </SPD_UDF1.SPD.SRS>
                </SPD.SRS>
            </SPD>
        </EXCHANGE>
    </xsl:template>
</xsl:stylesheet>

Output XML

<?xml version='1.0' encoding='utf-8' ?>
<EXCHANGE>
  <SPD>
    <SPD.SRS>
      <SPD_STUC.SPD.SRS>580064065</SPD_STUC.SPD.SRS>
      <SPD_SEQN.SPD.SRS>CRB</SPD_SEQN.SPD.SRS>
      <SPD_UDF1.SPD.SRS>202201310003</SPD_UDF1.SPD.SRS>
    </SPD.SRS>
  </SPD>
</EXCHANGE>
miriamka
  • 459
  • 5
  • 9
0

If there is more in your message then just the SOAP-ENV:Body and want to know how to deal with namespaces using xsl, this is what you might need:

<?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:ns1="https://XXX.disclosures.co.uk/"
  exclude-result-prefixes="SOAP-ENV ns1"
  version="1.0" 
  >
  <xsl:output indent="yes" method="xml" encoding="utf-8"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/">
    <xsl:apply-templates select="SOAP-ENV:Envelope/SOAP-ENV:Body/ns1:InitiateApplicationResponse/InitiateApplicationResponse/Application"/>
  </xsl:template>
  
  <xsl:template match="Application">
      <EXCHANGE>
        <SPD>
          <SPD.SRS>
            <SPD_STUC.SPD.SRS>
              <xsl:value-of select="ApplicantReferenceNumber" />
            </SPD_STUC.SPD.SRS>
            <SPD_SEQN.SPD.SRS>CRB</SPD_SEQN.SPD.SRS>
            <SPD_UDF1.SPD.SRS>
              <xsl:value-of select="TransactionReferenceNumber" />
            </SPD_UDF1.SPD.SRS>
          </SPD.SRS>
        </SPD>
      </EXCHANGE>
  </xsl:template>
</xsl:stylesheet>
Siebe Jongebloed
  • 3,906
  • 2
  • 14
  • 19