Reputation: 997
I have a request XML as follows which would need to be convereted into a different format. Can some pne please help me with this.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:fetchOrderListResponse xmlns:ns2="http://impl.lob.wipro.com/">
<return>
<customerOrderNumber>1</customerOrderNumber>
<orderId>E147011D-AE9F-4AC8-AF37-05DC538AF1D0</orderId>
<ordertotal>0</ordertotal>
</return>
<return>
<customerOrderNumber>1</customerOrderNumber>
<orderDetails>
<itemPrice>50.0</itemPrice>
<itemQty>2</itemQty>
<itemUnit>0</itemUnit>
<orderDetailsId>37516016-D71B-4790-951F-55D00B0CC159</orderDetailsId>
</orderDetails>
<orderDetails>
<itemPrice>39.0</itemPrice>
<itemQty>3</itemQty>
<itemUnit>0</itemUnit>
<orderDetailsId>6095ABC7-0D0D-4B2E-92E5-80F24E9092B8</orderDetailsId>
</orderDetails>
<orderId>84EC371D-40CA-455E-A0FA-7EA733E9BFD3</orderId>
<ordertotal>217</ordertotal>
</return>
<return>
<customerOrderNumber>1</customerOrderNumber>
<orderId>54712493-2172-4ADB-814B-BC7AA0BB72C3</orderId>
<ordertotal>0</ordertotal>
</return>
<return>
<customerOrderNumber>1</customerOrderNumber>
<deliverydate>2013-02-06T00:00:00+05:30</deliverydate>
<orderDetails>
<itemPrice>565.0</itemPrice>
<itemQty>1</itemQty>
<itemUnit>0</itemUnit>
<orderDetailsId>9A5030BE-F95F-4C62-B5A2-41FF85423218</orderDetailsId>
</orderDetails>
<orderDetails>
<itemPrice>4.0</itemPrice>
<itemQty>90</itemQty>
<itemUnit>0</itemUnit>
<orderDetailsId>65A8B3BE-D407-43D8-8754-EA1E26AA56E4</orderDetailsId>
</orderDetails>
<orderId>0BDCB222-0117-47A9-8813-DF03A1D19E5E</orderId>
<ordertotal>925</ordertotal>
</return>
<return>
<customerOrderNumber>1</customerOrderNumber>
<orderId>8E4220DC-884B-47BC-A565-E26B80BA5249</orderId>
<ordertotal>0</ordertotal>
</return>
<return>
<customerOrderNumber>1</customerOrderNumber>
<deliverydate>2013-02-06T00:00:00+05:30</deliverydate>
<orderDetails>
<itemPrice>10.0</itemPrice>
<itemQty>4</itemQty>
<itemUnit>0</itemUnit>
<orderDetailsId>5A2DF895-BB0F-4039-80DB-F44CED31697B</orderDetailsId>
</orderDetails>
<orderDetails>
<itemPrice>20.0</itemPrice>
<itemQty>3</itemQty>
<itemUnit>0</itemUnit>
<orderDetailsId>8034FBF4-B573-4B19-BDF5-FAF6C4247A55</orderDetailsId>
</orderDetails>
<orderId>60161E3E-3C4A-4CE6-AAC3-E4D2BC240046</orderId>
<ordertotal>100</ordertotal>
</return>
</ns2:fetchOrderListResponse>
</soap:Body>
</soap:Envelope>
Response should be of the format as below. Please help with the XSLT to transform the same
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.client.inmemory.eim.wipro.com/">
<soapenv:Header/>
<soapenv:Body>
<ser:getOrderDetailResponse>
<!--Zero or more repetitions:-->
<return>
<itemPrice>?</itemPrice>
<itemQty>?</itemQty>
<itemUnit>?</itemUnit>
<!--Optional:-->
<orderDetailsId>?</orderDetailsId>
<!--Optional:-->
<orderId>?</orderId>
</return>
</ser:getOrderDetailResponse>
</soapenv:Body>
</soapenv:Envelope>
I came up with a XSLT to do this. Unfortunately it is not working and not pulling any data. Kindly let me know what I am doing wrong
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.client.inmemory.eim.wipro.com/">
<soapenv:Header/>
<soapenv:Body>
<ser:getOrderDetailResponse>
<!--Zero or more repetitions:-->
<return>
<xsl:for-each select="return/orderDetails">
<itemPrice><xsl:value-of select="return/orderDetails/itemPrice"/></itemPrice>
<itemQty><xsl:value-of select="return/orderDetails/itemQty"/></itemQty>
<itemUnit><xsl:value-of select="return/orderDetails/itemUnit"/></itemUnit>
<orderDetailsId><xsl:value-of select="return/orderDetails/orderDetailsId"/></orderDetailsId>
<orderId><xsl:value-of select="orderId"/></orderId>
</xsl:for-each>
</return>
</ser:getOrderDetailResponse>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
</xsl:stylesheet>
Upvotes: 0
Views: 126
Reputation: 52888
Not sure why you deleted your first question and posted the exact same one over again. After you added the XSLT, it was an answerable question.
Anyway the issue is that your template matches /
, but then you try to do an xsl:for-each
starting at return/orderDetails
. You really have to pay attention to context in XSLT.
First add the appropriate namespaces to xsl:stylesheet
...
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns2="http://impl.lob.wipro.com/"
Second, adjust your select
accordingly:
<xsl:for-each select="/soap:Envelope/soap:Body/ns2:fetchOrderListResponse/return/orderDetails">
I'm not sure if this returns exactly what you're looking for, but it returns data. You should be able to adjust after you see the output
Upvotes: 1