Sven Grosen
Sven Grosen

Reputation: 5636

How to Process XML in Azure Logic App

I'll start with the behavior we are looking to have:

  1. Take in a file (be it JSON or XML, but right now we would prefer XML although we have control over this),
  2. Parse it to find the "type" of the file
  3. Transform the file to match one of a few different XML formats
  4. Send it off to a pre-determined endpoint and back to the caller

Our initial research made it look like BizTalk with an Azure logic app would be a good fit for this, but now that I'm working on a Proof of Concept I am running into roadblocks, namely:

I've been able to create a logic app, expose an endpoint, call it with a JSON body, and have the logic app parse that JSON and conditionally perform actions, and once I figured out how to do all of that, it was pretty impressive.

So my question is two-fold:

  1. Is our situation a good candidate for an Azure Logic App (or perhaps a different type of Azure app)?
  2. If so, is BizTalk the proper way to transform our files into the needed output XML formats?
    1. From what I'm seeing online, there isn't a way to create BizTalk transform files in VS 2015?

      BizTalk server projects are not compatible with Visual Studio 2015 or Visual Studio 2013.

Upvotes: 5

Views: 19311

Answers (3)

Watsyyy
Watsyyy

Reputation: 125

  1. Receive XML POST request.
  2. Transform the XML. - Use content as triggerBody() and map using XSLT. You can set the XML format here.

    <?xml version='1.0'?>
    <xsl:stylesheet version="1.0">
    <xsl:template match="/">
    <Header>
    <Something>
    <xsl:value-of select="soap-env:Envelope/soap-env:Body/a:Something/@value"/>
    </Something>
    </Header>
    </xsl:template>
    </xsl:stylesheet>
    
  3. Transform XML to JSON - Use content body('transform_XML') and map using XML to Json.

    {"Something": "{{content.Something.Value}}"
    
  4. Parse JSON - Use content body('transform_XML_to_JSON')
  5. HTTP Response - set the values you want returned as body('Parse_JSON')['Value'] into the Body.

    <Header>
    <Something>
    <value = "body('Parse_JSON')['Value']"/>
    </Something>
    </Header>
    
  6. You can also create a blob with this and send to a data factory.

Upvotes: 2

moji
moji

Reputation: 1

You can also use Function Apps w/NewtonSoft (JSON.net). Logic Apps are amazing, but they are not the sandwich AND the chips... at least not quite yet.

You should be able to nest a Function App in a Logic App. Use NewtonSoft (In Function App) to support the parsing XML>JSON, JSON>XML

Upvotes: 0

Vinay Singh
Vinay Singh

Reputation: 46

We recently shipped Preview of [Enterprise Integration Pack] (EIP) for Logic Apps. As part of this release, a bunch of xml processing capabilities have been added to Logic Apps.

  1. [JSON to XML] and vice versa: You can use the json() and xml() functions that are natively available in Logic Apps definition.
  2. XML Transform: You can now use the new XML Transform action which is based upon XSLT 1.0.

Beyond these, Logic Apps also has HTTP requests/response capabilities which can be used to call HTTP endpoints.

Hope this helps.

Thanks, Vinay

Upvotes: 3

Related Questions