Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Excerpt
hiddentrue

xmlToItems(XML, XPath) Extracts nodes from a chunk of XML (a string) and creates a list of items


Function: xmlToItems()

Extracts nodes from a chunk of XML (a string) and creates a list of items - which can be processed just as any list of values in PhixFlow.

...

Syntax

xmlToItems(XML, XPath)

ArgumentTypeDescription
XMLStringThe full XML data, stored in a string variable.
XPathStringXPath expression to extract data from the XML.
Note : XPath is a w3 standard language for addressing parts of an XML document. For more details see www.w3.org/TR/xpath

Common Errors

"NCNames cannot start with the characters XX" 

XML Headers cannot start with numbers, so an error like this means somewhere within the JSON there is a key value that starts with a number, or an invalid character.  In the below JSON, we can see a key that starts with the number 9. This cannot be converted to XML, so the invalid character(s) need to be removed and replaced before xmlToItems() can be performed. 


Code Block
"flags_options": {
"9": {
"trusted": true
}
},
"trusted": true


For example, in this case the following replaceAll() expression can be used to replace the key with the text "number".


Code Block
replaceAll($cleanJSON,'"\\d+":','"number":')


See Regular Expressions.

Examples

Where $xml is :

...

If we add some xml into a $-variable:

Code Block
do(
   $xml = 
   '<?xml version="1.0" encoding="ISO-8859-1"?><store><thing category="X1"><name>Item1</name><price>15.00</price></thing><thing category="X2"><name>Item2</name><price>17.99</price></thing></store>',

   xmlToItems($xml, "/store/thing/price")

)

/* 
 * Where the xml would expanded would look like the below:
 *
   '<?xml version="1.0" encoding="ISO-8859-1"?>
   <store>
      <thing category="X1">
         <name>Item1</name>
         <price>15.00</price>
      </thing>
      <thing category="X2">
         <name>Item2</name>
         <price>17.99</price>
      </thing>
   </store>

...

',
 *
 */

Returns the values (in a list):

[15.00, 17.99]

See Also