How to fetch attribute value from XML paylaod

Meenal Gharat
Giga Guru

Hello all,

Can someone please help me to retrieve attribute value from my xml payload.

below is the example for my xml payload:

<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.024/Fulfill.dtd">
 
<cXML payloadID="16588@am.in" timestamp="2022-07-14T15:29:41+0000" xml:lang="en-US">
<Header>
<From>
<Credential domain="NetworkId">
<Identity>677</Identity>
</Credential>
</From>
<To>
<Credential domain="NetworkId">
<Identity>user</Identity>
</Credential>
</To>
<Sender>
<Credential domain="NetworkId">
<Identity>568878</Identity>
<SharedSecret>#</SharedSecret>
</Credential>
<UserAgent> LLC eProcurement Application</UserAgent>
</Sender>
</Header>
<Request>
<ConfirmationRequest>
<ConfirmationHeader confirmID="113-0922115-0544258" operation="new" type="detail" noticeDate="2022-07-14T15:29:41+0000">
<Total>
<Money currency="USD">48.42</Money>
</Total>
<Shipping>
<Money currency="USD">0.00</Money>
<Description xml:lang="en-US">Cost of shipping, not including shipping tax</Description>
</Shipping>
<Tax>
<Money currency="USD">3.59</Money>
<Description xml:lang="en-US">Cost of tax, including shipping tax</Description>
</Tax>
</ConfirmationHeader>
<OrderReference orderID="A001098001-RITM6119319-POL0074845" orderDate="2022-07-14T15:29:41Z">
<DocumentReference payloadID="POL00748452022-07-14T15:24:34-0372"/>
</OrderReference>
<ConfirmationItem quantity="1" lineNumber="1">
<UnitOfMeasure>EA</UnitOfMeasure>
<ConfirmationStatus quantity="1" type="detail">
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">44.83</Money>
</UnitPrice>
<Tax>
<Money currency="USD">3.59</Money>
<Description xml:lang="en-US">Cost of tax, including shipping tax</Description>
<TaxDetail category="none" percentageRate="8.01" purpose="subtotalTax">
<TaxAmount>
<Money currency="USD">3.59</Money>
</TaxAmount>
</TaxDetail>
</Tax>
<Shipping>
<Money currency="USD">0.00</Money>
<Description xml:lang="en-US">Cost of shipping, not including shipping tax</Description>
</Shipping>
<Comments type="confirmID">113-0922115-0544258</Comments>
</ConfirmationStatus>
</ConfirmationItem>
</ConfirmationRequest>
</Request>
</cXML>
 
I wanted to fetch orderID and payloadID :
I tried below script and its working when testing from REST API Explorer.
 
var xmlString = request.body.dataString;
gs.info("inbound request" +xmlString);
 
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString);
//var orderID = xmlDoc.getNode("//@orderID").getNodeValue();
var orderID = xmlDoc.getNode('//OrderReference').getAttribute('orderID');
gs.info('orderID'+orderID);
var splitID = orderID.toString().split("-");
var pol_number = splitID[2];
gs.info("orderID" +pol_number);
 
//var vpayloadID = xmlDoc.getNode("//@payloadID").getNodeValue();
var vpayloadID = xmlDox.getNode('//<DocumentReference').getAttribute('payloadID');
gs.log("orderIDpayload"+vpayloadID);
 
//var type = xmlDoc.getNode("//@type").getNodeValue();
var type = xmlDoc.getNode('//ConfirmationStatus').getAttribute('type');
gs.log("orderIDtype" +type);
 
 
Same doesn't work when they are sending this response.could please help me to retrieve orderID and payload ID from the above example.
 
Kindly assist.
 
Best Regards,
Meenal Gharat
1 ACCEPTED SOLUTION

Hello @Meenal Gharat 

My bad sorry!

Can you try with below script .It worked for me with your payload 

var xmlDoc = new XMLDocument2(xmlString);
xmlDoc.parseXML( xmlString ); 
var node = xmlDoc.getNode("//ConfirmationRequest");
var childNodes = node.getChildNodeIterator();
while(childNodes.hasNext())
{
     var i = childNodes.next().toString();
	gs.info('testing xmls'+i);
     var index = i.indexOf("orderID");
	gs.info('testing index'+index);
     if(index  > -1){
       var end = i.indexOf("\">", index);
       gs.info('My values'+i.substring(index+9, end));
     }

Please try this and let me know

Proof :

find_real_file.png

Please mark my answer correct if it helps you

View solution in original post

6 REPLIES 6

Ankur Bawiskar
Tera Patron
Tera Patron

@Meenal Gharat 

you can convert the XML to JSON and then use JSON parser

Parsing JSON is much easier

It worked well for me

var str = gs.getProperty('xml.string');

var jsonObj = gs.xmlToJSON(str);

var orderID = jsonObj.cXML.Request.ConfirmationRequest.OrderReference.orderID;

var payloadID = jsonObj.cXML.Request.ConfirmationRequest.OrderReference.DocumentReference.payloadID;

gs.info("orderID->" + orderID);

gs.info("payloadID->" + payloadID);

Output:

find_real_file.png

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

@Meenal Gharat 

Hope you are doing good.

Did my reply answer your question?

If my response helped please close the thread by marking appropriate response as correct so that it benefits future readers.

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader