Instantly share code, notes, and snippets.

Embed
What would you like to do?
Function to convert XML to JSON
// Changes XML to JSON
// Modified version from here: http://davidwalsh.name/convert-xml-json
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 just one text node inside
if (xml.hasChildNodes() && xml.childNodes.length === 1 && xml.childNodes[0].nodeType === 3) {
obj = xml.childNodes[0].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;
}
@ScottBeeson

This comment has been minimized.

ScottBeeson commented May 17, 2016

I love you.

@lionel-augustelouis

This comment has been minimized.

lionel-augustelouis commented Jan 24, 2017

Hi,
First thank you for the code ;)

Maybe an update that could help.
line.23 : Just add this && !obj["@attributes"] to keep attributes when node is type === 3 (text)

@charith93

This comment has been minimized.

charith93 commented Mar 3, 2017

Hi,

Need a help urgently.
I am getting an error as "xml.hasChildNodes is not a function".

Will be very thankful if you could help me.

@salshyn

This comment has been minimized.

salshyn commented Apr 4, 2017

Having the same issue as @charith93.

@LuceroGera

This comment has been minimized.

LuceroGera commented Apr 24, 2017

Hello,
I have the same issue as @charith93 & @salshyn, someone can help us please?

Thanks.

@vivekannan

This comment has been minimized.

vivekannan commented May 6, 2017

@charith93 @LuceroGera @salshyn my guess is you are passing a string instead of a XML-DOM obj. Try this instead,

var xml = "The XML as String";
var xmlDOM = new DOMParser().parseFromString(xml, 'text/xml');

and then,

xmlToJson(xmlDOM);

@jasminejeane

This comment has been minimized.

jasminejeane commented May 31, 2017

@vivekannan worked like a charm. Thank you

@maxIrvine

This comment has been minimized.

maxIrvine commented Jul 18, 2017

Super helpful! Thank you!

@vibhorejaiswal

This comment has been minimized.

vibhorejaiswal commented Jul 19, 2017

Thank you very much !!

It worked great !!

@ashishsurana

This comment has been minimized.

ashishsurana commented Aug 28, 2017

Everything worked great but I was not able to parse it completely.
in XML i had data like <ekey pi="308309309">here_it_contains_the_ekey</ekey>
and in JSON, I'm getting the only {ekey : "here_it_contains_the_ekey"}
there is no existence of pi in parsed object

@theo-armour

This comment has been minimized.

theo-armour commented Sep 4, 2017

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.

@ghost

This comment has been minimized.

ghost commented Sep 6, 2017

AAAAAAAHHHHHHHHH!!!
I can kiss you!

json.LE.math.image.textML.en is so much better than
xmlDoc.getElementsByTagName("LE")[0].getElementsByTagName("math")[0].getElementsByTagName("image")[0].getElementsByTagName("textML")[0].getElementsByTagName("en")[0].innerHTML

No fuss. It just worked also...

@baladkb

This comment has been minimized.

baladkb commented Oct 12, 2017

Hi @chinchang, how we can convert XML file to JSON string?

@truongphucuong

This comment has been minimized.

truongphucuong commented Oct 18, 2017

Hello @chinchang,
I have the same issue as @baladkb, how we can convert XML file to JSON string and convert JSON string to XML file ???
Help Me !!!

@linhnt2803

This comment has been minimized.

linhnt2803 commented Oct 30, 2017

Love you <3 <3

@satriowibowo123

This comment has been minimized.

satriowibowo123 commented Oct 31, 2017

Thank You very much @chinchang

@demircancelebi

This comment has been minimized.

demircancelebi commented Nov 21, 2017

In case someone needs it, here is the ES6 version:

https://gist.github.com/demircancelebi/f0a9c7e1f48be4ea91ca7ad81134459d

@chhonmeily

This comment has been minimized.

chhonmeily commented Jun 7, 2018

THANK YOU SO MUCH!!! GOD BLESS YOU!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

@Teclogen

This comment has been minimized.

Teclogen commented Sep 5, 2018

Your Logic Building is strong. Keep it Up

@iPzard

This comment has been minimized.

iPzard commented Nov 29, 2018

You're a lifesaver!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment