I am using the following script to convert an XML to a JSON object:
function xmlToJson(xml) {
var obj = {};
if (xml.nodeType == 1) { // element
// do attributes
if (xml.attributes.length > 0) {
obj["@attributes"] = {};
for (var j = 0; j < xml.attributes.length; j++) {
var attribute = xml.attributes.item(j);
obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
}
}
} else if (xml.nodeType == 4) { // cdata section
obj = xml.nodeValue
}
// do children
if (xml.hasChildNodes()) {
for (var i = 0; i < xml.childNodes.length; i++) {
var item = xml.childNodes.item(i);
var nodeName = item.nodeName;
if (typeof(obj[nodeName]) == "undefined") {
obj[nodeName] = xmlToJson(item);
} else {
if (typeof(obj[nodeName].length) == "undefined") {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
if (typeof(obj[nodeName]) === 'object') {
obj[nodeName].push(xmlToJson(item));
}
}
}
}
return obj;
};
It gives me the following error in the console:
Uncaught TypeError: xml.hasChildNodes is not a function
The XML is as simple as this:
<"?xml version="1.0" encoding="utf-8"?>
<animals>
<dog color='Black'>
<name>Rufus</name>
<breed>labrador</breed>
</dog>
<dog breed='whippet'>
Adopted
<name>Marty</name>
</dog>
<cat color="White">
<name>Matilda</name>
</cat>
</animals>
What am I doing wrong that I can't work with the XML?
The problem you have is that the variable
xml
you pass to the function is not aXML
DOM DOC and therefore does not have the functionhasChildNodes()
try this:
Because in your console you are sending a different object to an XML document, it gives you this error, for this you could use
jQuery
to perform conversion.Reference: