Similar to JSON Parser, there is no direct available actions to handle XML Data in Flows. But we do have 2 functions that can be used in expressions, xpath() and xml(). we will be going through these functions as below.
XML function will take JSON object data or any XML formatted string and converts it into an XML object. And, if we use JSON object, make sure there is a root property (only one) and not an array object.
XPATH function is used to navigate through XML and fetch the node content. This function has 2 inputs, first one is the XML object and second one is XPATH expression. And, returns array or XML nodes or the values in nodes as per given XPATH
Lets consider below sample XML
We can refer to below XPATH expressions to pull data
As we get the response in Array, we can use Apply to Each or Join Operations to go through the content.
Note: When we directly look into the action ouputs in flow history, it would be in encoded format. Once you access into any actions, it will be decoded.
Thanks to Raga for looking into this along with me.
XML function will take JSON object data or any XML formatted string and converts it into an XML object. And, if we use JSON object, make sure there is a root property (only one) and not an array object.
xml(json('{"EmployeeName":"Lucky"}'))
Returns
<EmployeeName>Lucky</EmployeeName>
xml(json('{"Records":{"Employee":[{"Name":"Lucky","Id":"12345"},
{"Name":"Raga","Id":"54321"}]}}'))
Returns
<Records>
<Employee>
<Name>Lucky</Name>
<Id>12345</Id>
</Employee>
<Employee>
<Name>Raga</Name>
<Id>54321</Id>
</Employee>
</Records>
xml('<Employee>Lucky</Employee>')
Returns
<Employee>
Lucky
</Employee>
xml(json('{"Name":"Lucky","Id":"12345"}'))
This fails as there are 2 parent properties
XPATH function is used to navigate through XML and fetch the node content. This function has 2 inputs, first one is the XML object and second one is XPATH expression. And, returns array or XML nodes or the values in nodes as per given XPATH
Lets consider below sample XML
<?xml version="1.0" encoding="utf-8" ?>
<Records>
<Employee>
<Id>1234</Id>
<Name>John, Velvet</Name>
<Role>Senior Developer</Role>
<Salary>15000</Salary>
</Employee>
<Employee>
<Id>3424</Id>
<Name>Angel, Josh</Name>
<Role>Developer</Role>
<Salary>12000</Salary>
</Employee>
<Employee>
<Id>5421</Id>
<Name>Tim, Kary</Name>
<Role>Tech Lead</Role>
<Salary>18000</Salary>
</Employee>
</Records>
We can refer to below XPATH expressions to pull data
xpath(xml(outputs('xmlContent')),'/Records/Employee')
Returns array of EMployee Nodes with XML data in them.
[
'<Employee>
<Id>1234</Id>
<Name>John, Velvet</Name>
<Role>Senior Developer</Role>
<Salary>15000</Salary>
</Employee>'
,
'<Employee>
<Id>3424</Id>
<Name>Angel, Josh</Name>
<Role>Developer</Role>
<Salary>12000</Salary>
</Employee>'
,
'<Employee>
<Id>5421</Id>
<Name>Tim, Kary</Name>
<Role>Tech Lead</Role>
<Salary>18000</Salary>
</Employee>'
]
xpath(xml(outputs('xmlContent')),'//Name')
Returns, array of values of all Nodes with "Name",
['<Name>John, Velvet</Name>','<Name>Angel, Josh</Name>','<Name>Tim, Kary</Name>']
xpath(xml(outputs('xmlContent')),'/Records/Employee/Name')
Returns, array of Names under Employee/Records nodes
['<Name>John, Velvet</Name>','<Name>Angel, Josh</Name>','<Name>Tim, Kary</Name>']
xpath(xml(outputs('xmlContent')),'sum(/Records/Employee/Salary)')
Returns, sums up the values from the xpath node values.
45000
xpath(xml('<employee>Lucky</employee>'),'string(.)')
Returns, value in the Node.
Lucky
As we get the response in Array, we can use Apply to Each or Join Operations to go through the content.
Note: When we directly look into the action ouputs in flow history, it would be in encoded format. Once you access into any actions, it will be decoded.
Thanks to Raga for looking into this along with me.
No comments:
Post a Comment