I want to convert XML response into CDT format.

I am having process model which scheduled to run after every hour and get XML response from external system and storing into text type pv.

XML data in nested CDT format.

Now, We want to read that XML file into Appian CDT. For reference i am giving below XML response.

<variable type="InputBO">
<paymentInfo type="PaymentBO">
<operationType type="String">CAPTURE</operationType>
<channelId type="String">AAA</channelId>
<paymentTypeCode type="String">BBB</paymentTypeCode>
<referenceNumber type="String">ABCD145891</referenceNumber>
<paymentAmount type="Decimal">515.0</paymentAmount>
<paymentCurrency type="String">GBP</paymentCurrency>
<paymentCardDetails type="PaymentCardDetailsBO">
</paymentInfo>
</variable>

Could you please help me to achieve this task? Thanks for your support in advance.(Appian version 18.1)

  Discussion posts and replies are publicly visible

Parents
  • Thanks all for your help!!!

    @Sachin, I tried your solution and worked at some level but still looking for desired output.

    I am calling expression rule from process model and passing XML response. I am able to extract XML but in properly.

    Test Rule:
    load(
    local!data: ri!service

    a!forEach(
    items: xpathsnippet(
    local!data,
    "/variable/*/*"
    ),
    expression: /* your cdt */
    {
    operationType: index(xpathsnippet(fv!item,"/operationType/text()"),1,null()),
    channelId:index(xpathsnippet(fv!item,"/channelId/text()"),1,null()),
    paymentTypeCode:index(xpathsnippet(fv!item,"/paymentTypeCode/text()"),1,null()),
    referenceNumber:index(xpathsnippet(fv!item,"/referenceNumber/text()"),1,null()),
    paymentAmount:index(xpathsnippet(fv!item,"/paymentAmount/text()"),1,null()),
    paymentCurrency:index(xpathsnippet(fv!item,"/paymentCurrency/text()"),1,null())
    }
    )

    )

    ------------------------------------------------------
    Current Output:
    [operationType:CAPTURE,channelId:,paymentTypeCode:,referenceNumber:,paymentAmount:,paymentCurrency:]; [operationType:,channelId:AAA,paymentTypeCode:,referenceNumber:,paymentAmount:,paymentCurrency:]; [operationType:,channelId:,paymentTypeCode:AAA,referenceNumber:,paymentAmount:,paymentCurrency:]; [operationType:,channelId:,paymentTypeCode:,referenceNumber:AAAA120145891,paymentAmount:,paymentCurrency:]; [operationType:,channelId:,paymentTypeCode:,referenceNumber:,paymentAmount:515.0,paymentCurrency:]; [operationType:,channelId:,paymentTypeCode:,referenceNumber:,paymentAmount:,paymentCurrency:AAA]

    ----------------------------------------------------------------

    Passed XML response:
    <variable type="VmaadBO">
    <paymentInfo type="PaymentBO">
    <operationType type="String">CAPTURE</operationType>
    <channelId type="String">AAA</channelId>
    <paymentTypeCode type="String">AAA</paymentTypeCode>
    <referenceNumber type="String">AAA120145891</referenceNumber>
    <paymentAmount type="Decimal">515.0</paymentAmount>
    <paymentCurrency type="String">AAA</paymentCurrency>
    </paymentInfo>
    </variable>

    Should return single CDT with values. I tried without foreach. We are getting 5 rows as per looping 5 times.

    Could you please help on this. Thank you.
  • 0
    A Score Level 1
    in reply to Vinod Tate

    vinodt376 you are almost correct just replace foreach items with below code

    xpathsnippet(local!data,"/variable/*")

Reply Children
No Data