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>
CodePudding user response:
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>
CodePudding user response:
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>
