xslt for-each select path navigation for SOAP response



I am trying to convert SOAP response xml into another xml. So that i can use OracleXMLSave to save my xml easily based on table and column names.


I want to convert below soap response xml .



<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://ift.tt/18hkEkn" xmlns:a="http://ift.tt/HKXHai">
<s:Header>
<a:Action s:mustUnderstand="1">http://ift.tt/1rToUMv;
<h:Is_x0020_Secure_x0020_Service_x0020_Authedicated xmlns:h="http://tempuri.org/" s:mustUnderstand="1">true</h:Is_x0020_Secure_x0020_Service_x0020_Authedicated>
</s:Header>
<s:Body>
<ResponseMessage xmlns="http://tempuri.org/">
<DC_x0020_response>
<![CDATA[&amp;lt;![CDATA[&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&amp;lt;DCResponse&amp;gt;
&amp;lt;Status&amp;gt;Success&amp;lt;/Status&amp;gt;
&amp;lt;Authentication&amp;gt; &amp;lt;Status&amp;gt;Success&amp;lt;/Status&amp;gt; &amp;lt;Token&amp;gt;5edb2f9a-267d-4f48-97b2-f44ad10d5240&amp;lt;/Token&amp;gt; &amp;lt;/Authentication&amp;gt;
&amp;lt;ResponseInfo&amp;gt; &amp;lt;ApplicationId&amp;gt;1800985&amp;lt;/ApplicationId&amp;gt; &amp;lt;SolutionSetInstanceId&amp;gt;108b2e5d-2e7e-40a8-8fc6-f5b4ca36d0ab&amp;lt;/SolutionSetInstanceId&amp;gt; &amp;lt;/ResponseInfo&amp;gt;
&amp;lt;ContextData&amp;gt;
&amp;lt;Field key=&amp;quot;InquirySource&amp;quot;&amp;gt;:Node:101:42216&amp;#163;@WEST@*FraudScore_Group1_RTVRRequired|&amp;lt;/Field&amp;gt;
&amp;lt;Field key=&amp;quot;ExternalApplicationId&amp;quot;&amp;gt;100014317&amp;lt;/Field&amp;gt;
&amp;lt;Field key=&amp;quot;TURFXML&amp;quot;&amp;gt; &amp;lt;
![CDATA[ &amp;lt;
CreditReport&amp;gt; &amp;lt;
&amp;lt;NameSegment&amp;gt; &amp;lt;Length&amp;gt;03&amp;lt;/Length&amp;gt; &amp;lt;SegmentTag&amp;gt;N01&amp;lt;/SegmentTag&amp;gt; &amp;lt;ConsumerName1FieldLength&amp;gt;22&amp;lt;/ConsumerName1FieldLength&amp;gt; &amp;lt;ConsumerName1&amp;gt;MR RAGHURAM VENKATESAN&amp;lt;/ConsumerName1&amp;gt; &amp;lt;DateOfBirthFieldLength&amp;gt;08&amp;lt;/DateOfBirthFieldLength&amp;gt; &amp;lt;DateOfBirth&amp;gt;04061975&amp;lt;/DateOfBirth&amp;gt; &amp;lt;GenderFieldLength&amp;gt;01&amp;lt;/GenderFieldLength&amp;gt; &amp;lt;Gender&amp;gt;2&amp;lt;/Gender&amp;gt; &amp;lt;FID&amp;gt;0019009142&amp;lt;/FID&amp;gt; &amp;lt;/NameSegment&amp;gt; &amp;lt;/CreditReport&amp;gt;]]&amp;gt; &amp;lt;/Field&amp;gt; &amp;lt;/ContextData&amp;gt;&amp;lt;/DCResponse&amp;gt;]]&amp;gt;]]>
</DC_x0020_response>
</ResponseMessage>
</s:Body>
</s:Envelope>


My output response xml should be like below



<CreditReport>
<TR_CIBIL_TURF_PNS>
<TR_CIBIL_TURF_PN>
<SZNAME>MR RAGHURAM VENKATESAN </SZNAME>
<SZDOB>12031974</SZDOB>
<SZGENDER>2</SZGENDER>
</TR_CIBIL_TURF_PN>
</TR_CIBIL_TURF_PNS>
</CreditReport>


I have tried using below xslt to convert my soap to desire response. But its not working. Please help



<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://ift.tt/tCZ8VR"
xmlns:s="http://ift.tt/18hkEkn"
xmlns:ns2="http://tempuri.org/" >
<xsl:template name="responseTemplate">
<xsl:element name="CreditReport">
<xsl:element name="TR_CIBIL_TURF_PNS">
<xsl:for-each
select="s:Envelope/s:Body/ns2:ResponseMessage/DC_x0020_response/DCResponse/ContextData/Field[@key ='TURFXML']/CreditReport/NameSegment">
<xsl:element name="TR_CIBIL_TURF_PN">
<xsl:element name="SZNAME">
<xsl:value-of select="concat(ConsumerName1,' ',ConsumerName2,' ',ConsumerName3,' ',ConsumerName4,' ',ConsumerName5)"/>
</xsl:element>
<xsl:element name="SZDOB">
<xsl:value-of select="DateOfBirth"/>
</xsl:element>
<xsl:element name="SZGENDER">
<xsl:value-of select="Gender"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>

No comments:

Post a Comment