XMLDocument script object
Summarize
Summary of XMLDocument script object
TheXMLDocumentscript object in ServiceNow provides a JavaScript wrapper to parse and extract XML data from XML strings. It is commonly used to handle XML payloads returned from web service calls or ECC Queue messages. By using this object within business rules or other server-side scripts, you can easily query XML elements and attributes using XPath-based syntax.
Show less
Key Features
- Instantiation: Create an XMLDocument object from an XML string with
new XMLDocument(xmlString). For XML with namespaces, passtrueas the second argument to enable namespace awareness. - XPath Queries: Locate nodes and extract text or integer values with methods like
getNodeText(xpath)andgetNodeInt(xpath). XPath searches ignore namespace prefixes, so search for element names without prefixes. - Node Inspection: Retrieve nodes to access their name, type, children, and values using methods such as
getNodeName(),getNodeType(), andgetLastChild().getNodeValue(). - Node Lists: Obtain multiple nodes matching an XPath with
getNodes(xpath)and iterate or access nodes by index. - Attributes: Access node attributes via
getAttributes()or directly retrieve attribute values usinggetAttribute(xpath, attributeName). XPath can also query attribute nodes. - Element Creation: Dynamically create new XML elements at any location in the document using
createElement(name, value). UsesetCurrent(node)to set the parent node for new elements. - Namespace Handling: When parsing XML with namespaces, enabling namespace awareness allows XPath queries to include namespace prefixes.
- XMLHelper Script Include: Provides additional utilities to simplify XML parsing tasks within scripts.
Practical Use for ServiceNow Customers
This object empowers you to process and manipulate XML data within server-side scripts effectively, such as business rules or script includes. Whether consuming web service responses or integrating with external systems via ECC Queue, you can:
- Parse complex XML payloads with or without namespaces.
- Extract specific data points from XML elements or attributes using familiar XPath syntax.
- Create or modify XML documents dynamically before sending or storing them.
- Handle multiple XML nodes and iterate over them programmatically.
Overall, the XMLDocument object streamlines XML data handling in ServiceNow, enabling robust integration and automation scenarios involving XML content.
A JavaScript object wrapper for parsing and extracting XML data from an XML document (String).
Use this Javascript class to instantiate an object from an XML string, usually a return value from a Web Service invocation, or the XML payload of ECC Queue. Using the XMLDocument object in a Javascript business rule lets you query values from the XML elements and attributes directly.
Constructor
var xmlString = "<test>" +
" <one>" +
" <two att=\"xxx\">abcd1234</two>" +
" <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
" <two>another</two>" +
" </one>" +
" <number>1234</number>" +
"</test>";
var xmldoc = new XMLDocument(xmlString);var xmlString = "<bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>" +
"<bk:title>Cheaper by the Dozen</bk:title>" +
"<isbn:number>1568491379</isbn:number>" +
"</bk:book>";
var xmldoc = new XMLDocument(xmlString, true); // XML document is name space aware
Locating nodes and elements
var str = xmldoc.getNodeText("//two"); // returns the first occurrence of the node
// str == "abcd1234"
str = xmldoc.getNodeText("//three");
// str == "1234abcd"
str = xmldoc.getNodeText("/test/one/*");
// str == "abcd1234"
str = xmldoc.getNodeInt("//number");
// str == 1234
var node = xmldoc.getNode("/test/one/two");
// node.getNodeName() == "two"
// node.getNodeType() == "1" // 1 == ELEMENT_NODE
// node.getLastChild().getNodeType() == "3" // 3 == TEXT_NODE
// node.getLastChild().getNodeValue() == "abcd1234"str = xmldoc.getNodeName("//three");
// str == "three"
str = xmldoc.getNodeType("//three");
// str == "1"var nodelist = xmldoc.getNodes("//one/*"); // two, three, and two
// nodelist.getLength() == "3"
// nodelist.item(0).getNodeName() == "two"
// nodelist.item(1).getNodeName() == "three"var xmlString = "<bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>" +
"<bk:title>Cheaper by the Dozen</bk:title>" +
"<isbn:number>1568491379</isbn:number>" +
"</bk:book>";
var xmldoc = new XMLDocument(xmlString, true);
var str = xmldoc.getNodeText("//bk:title"); // returns the first occurence of the node
gs.log(str);
str = xmldoc.getNodeText("/bk:book/*");
gs.log(str);
str = xmldoc.getNodeInt("//isbn:number");
gs.log(str);Getting attribute values
An attribute is just an extension of a node and so it has all the same APIs.
node = xmldoc.getNode("//two");
// node.getAttributes().item(0).getNodeValue() == "xxx"
str = xmldoc.getAttribute("//two", "att");
// str == "xxx"str = xmldoc.getNodeText("//*[@att=\"yyy\"]");
// str == "1234abcd"
str = xmldoc.getNode("//@boo").getNodeValue();
// str == "yah"
Creating new elements
var xmlString = "<test>" +
" <one>" +
" <two att=\"xxx\">abcd1234</two>" +
" <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
" <two>another</two>" +
" </one>" +
" <number>1234</number>" +
"</test>";
var xmldoc = new XMLDocument(xmlString);
xmldoc.createElement("new", "test"); // creates the new element at the document element level if setCurrent is never called
xmldoc.createElement("new2"); // calling without a value will create a new element by itself
var el = xmldoc.createElement("new3");
xmldoc.setCurrent(el); // this is now the parent of any new elements created subsequently using createElement()
xmldoc.createElement("newChild", "test");<test>
<one>
<two att="xxx">abcd1234</two>
<three boo="yah" att="yyy">1234abcd</three>
<two>another</two>
</one>
<number>1234</number>
<new>test<new>
<new2/>
<new3>
<newChild>test</newChild>
</new3>
</test>