Last active
September 7, 2023 02:39
-
-
Save chinchang/8106a82c56ad007e27b1 to your computer and use it in GitHub Desktop.
Function to convert XML to JSON
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Changes XML to JSON | |
* Modified version from here: http://davidwalsh.name/convert-xml-json | |
* @param {string} xml XML DOM tree | |
*/ | |
function xmlToJson(xml) { | |
// Create the return object | |
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 == 3) { | |
// text | |
obj = xml.nodeValue; | |
} | |
// do children | |
// If all text nodes inside, get concatenated text from them. | |
var textNodes = [].slice.call(xml.childNodes).filter(function(node) { | |
return node.nodeType === 3; | |
}); | |
if (xml.hasChildNodes() && xml.childNodes.length === textNodes.length) { | |
obj = [].slice.call(xml.childNodes).reduce(function(text, node) { | |
return text + node.nodeValue; | |
}, ""); | |
} else 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].push == "undefined") { | |
var old = obj[nodeName]; | |
obj[nodeName] = []; | |
obj[nodeName].push(old); | |
} | |
obj[nodeName].push(xmlToJson(item)); | |
} | |
} | |
} | |
return obj; | |
} | |
/* | |
Usage: | |
1. If you have an XML file URL: | |
const response = await fetch('file_url'); | |
const xmlString = await response.text(); | |
var XmlNode = new DOMParser().parseFromString(xmlString, 'text/xml'); | |
xmlToJson(XmlNode); | |
2. If you have an XML as string: | |
var XmlNode = new DOMParser().parseFromString(yourXmlString, 'text/xml'); | |
xmlToJson(XmlNode); | |
3. If you have the XML as a DOM Node: | |
xmlToJson(YourXmlNode); | |
*/ |
thank you!
I am facing an error " cannot convert undefined or null to object " in line 23
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Has anyone gotten it to work with creating an array?