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

suvro
Mega Sage
Mega Sage

Hi,

 

Use the below article

https://community.servicenow.com/community?id=community_article&sys_id=a7df32a41b728d50c790ece6b04bcb47

Mohith Devatte
Tera Sage
Tera Sage

Hello,

Can you please try below script 

var xmlString = request.body.dataString;
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();
     var index = i.indexOf("orderID");
     if(index  > -1){
       var end = i.indexOf("\">", index);
       gs.info(i.substring(index+7, end));
     }
}

The above one prints the ORDER ID follow the same script but replace payloadID in the script for retrieving the payload id

Please mark my answer correct if it helps you

Hi Mohinth,

Thank you for your response.

The above code is giving orderID as 91 in logs.

Best Regards,

Meenal Gharat

 

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