can we use DOMParser ,to parse XML ?

String
Kilo Sage

Hi Team,

am using below code to parse incoming XML in script include , but getting error

DOMParser" is not defined.

 

var xmlDoc = new XMLDocument2();
                xmlDoc.parseXML(responseBody);
                var resposeStatus = xmlDoc.getNodeText("//_1_1:Status");
gs.info("price res"+resposeStatus);
                if (resposeStatus == 'SUCCESS') {
 
                 var parser = new DOMParser();
                    xmlDoc = parser.parseFromString(text, "text/xml");
 
                    var count = xmlDoc.getElementsByTagName("ItemNumber").length;
 
                    var mrvsArray = [];
 
                    for (var i = 0; i < count; i++) {
 
                        var mrvs1 = {};
 
                        mrvs1.ItemNumber = xmlDoc.getElementsByTagName("ItemNumber")[i].childNodes[0].nodeValue;
                  mrvs1.amount = xmlDoc.getElementsByTagName("Amount")[i].childNodes[0].nodeValue;
 
                        mrvsArray.push(mrvs1);
  }
 
                    return JSON.stringify(mrvsArray);
 
Please guide me where it went wrong 
4 REPLIES 4

Sai Shravan
Mega Sage

Hi @String ,

you can remove the XMLDocument2 code and use DOMParser to parse the XML instead. Here is an updated code snippet:

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(responseBody, "text/xml");
var resposeStatus = xmlDoc.querySelector("_1_1\\:Status").textContent;
gs.info("price res"+resposeStatus);
if (resposeStatus == 'SUCCESS') {
    var count = xmlDoc.getElementsByTagName("ItemNumber").length;
    var mrvsArray = [];
    for (var i = 0; i < count; i++) {
        var mrvs1 = {};
        mrvs1.ItemNumber = xmlDoc.getElementsByTagName("ItemNumber")[i].textContent;
        mrvs1.amount = xmlDoc.getElementsByTagName("Amount")[i].textContent;
        mrvsArray.push(mrvs1);
    }
    return JSON.stringify(mrvsArray);
}

 

In the above code used the textContent instead of childNodes[0].nodeValue to extract the text content of each element. This is because textContent is more efficient and reliable than childNodes[0].nodeValue.

Regards,
Shravan
Please mark this as helpful and correct answer, if this helps you

hi @Sai Shravan thanks for your quick reply ,Still am getting error "DOMParser" is not defined.

@Sai Shravan 

String_0-1678372264149.png

getting error "DOMParser" is not defined.

Hi @String , 

 

The error "DOMParser is not defined" usually occurs when the code is being executed outside of a browser environment. ServiceNow runs JavaScript in a server-side context, and the DOMParser is a browser-based API

 

Can you give a try will below code :

var xmlDoc = new XMLDocument2();
xmlDoc.parseXML(responseBody);

var resposeStatus = xmlDoc.getNodeText("//_1_1:Status");
gs.info("price res" + resposeStatus);

if (resposeStatus == 'SUCCESS') {
    var count = xmlDoc.getElementsByTagName("ItemNumber").length;
    var mrvsArray = [];
 
    for (var i = 0; i < count; i++) {
        var mrvs1 = {};
        mrvs1.ItemNumber = xmlDoc.getElementsByTagName("ItemNumber")[i].childNodes[0].nodeValue;
        mrvs1.amount = xmlDoc.getElementsByTagName("Amount")[i].childNodes[0].nodeValue;
        mrvsArray.push(mrvs1);
    }
 
    return JSON.stringify(mrvsArray);
}

 

Regards,
Shravan
Please mark this as helpful and correct answer, if this helps you