/** | |
* 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); | |
*/ |
This comment has been minimized.
This comment has been minimized.
Hi, Maybe an update that could help. |
This comment has been minimized.
This comment has been minimized.
Hi, Need a help urgently. Will be very thankful if you could help me. |
This comment has been minimized.
This comment has been minimized.
Having the same issue as @charith93. |
This comment has been minimized.
This comment has been minimized.
Hello, Thanks. |
This comment has been minimized.
This comment has been minimized.
@charith93 @LuceroGera @salshyn my guess is you are passing a string instead of a XML-DOM obj. Try this instead,
and then,
|
This comment has been minimized.
This comment has been minimized.
@vivekannan worked like a charm. Thank you |
This comment has been minimized.
This comment has been minimized.
Super helpful! Thank you! |
This comment has been minimized.
This comment has been minimized.
Thank you very much !! It worked great !! |
This comment has been minimized.
This comment has been minimized.
Everything worked great but I was not able to parse it completely. |
This comment has been minimized.
This comment has been minimized.
I had to delete the @ in front of attributes in order to get to the data using JavaScript objects dot notation Otherwise, it just works. Bonus points for the code being almost simple enough for me to understand. |
This comment has been minimized.
This comment has been minimized.
AAAAAAAHHHHHHHHH!!! json.LE.math.image.textML.en is so much better than No fuss. It just worked also... |
This comment has been minimized.
This comment has been minimized.
Hi @chinchang, how we can convert XML file to JSON string? |
This comment has been minimized.
This comment has been minimized.
Hello @chinchang, |
This comment has been minimized.
This comment has been minimized.
Love you <3 <3 |
This comment has been minimized.
This comment has been minimized.
Thank You very much @chinchang |
This comment has been minimized.
This comment has been minimized.
In case someone needs it, here is the ES6 version: https://gist.github.com/demircancelebi/f0a9c7e1f48be4ea91ca7ad81134459d |
This comment has been minimized.
This comment has been minimized.
THANK YOU SO MUCH!!! GOD BLESS YOU!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
This comment has been minimized.
This comment has been minimized.
Your Logic Building is strong. Keep it Up |
This comment has been minimized.
This comment has been minimized.
You're a lifesaver! |
This comment has been minimized.
This comment has been minimized.
Worked like a charm |
This comment has been minimized.
This comment has been minimized.
Wow Wow Wow Wow Wow guy u are a king @loveUGuy |
This comment has been minimized.
This comment has been minimized.
I am using the same code But when I am using the same code inside try and catch it is failing. The code was working fine but after updating node to 11.10.0, npm 6.8.0 and appium 1.11 |
This comment has been minimized.
This comment has been minimized.
Thanks for the code. I tried using the final version within a fetch call as shown below but I am getting this error: "Fetch TypeError: (0, _xmlTpJson.default) is undefined. I can't find any insight to the error or how to fix it. Please help and thanks. ` getNews() {
}` |
This comment has been minimized.
This comment has been minimized.
|
This comment has been minimized.
This comment has been minimized.
Updated with examples of how to use the function. |
This comment has been minimized.
This comment has been minimized.
@obisi7 let node = new DOMParser().parseFromString(response, 'text/xml')
let resJson = xmlToJson(node); |
This comment has been minimized.
This comment has been minimized.
how if contains cdata in a tags? |
This comment has been minimized.
This comment has been minimized.
Thanks. |
This comment has been minimized.
This comment has been minimized.
Has anyone gotten it to work with creating an array? |
This comment has been minimized.
This comment has been minimized.
thank you! |
This comment has been minimized.
I love you.