Create a gist now

Instantly share code, notes, and snippets.

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.

Show comment Hide comment
@ScottBeeson

ScottBeeson May 17, 2016

I love you.

I love you.

@lionel-augustelouis

This comment has been minimized.

Show comment Hide comment
@lionel-augustelouis

lionel-augustelouis 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)

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.

Show comment Hide comment
@charith93

charith93 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.

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.

Show comment Hide comment
@salshyn

salshyn Apr 4, 2017

Having the same issue as @charith93.

salshyn commented Apr 4, 2017

Having the same issue as @charith93.

@LuceroGera

This comment has been minimized.

Show comment Hide comment
@LuceroGera

LuceroGera Apr 24, 2017

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

Thanks.

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

Thanks.

@vivekannan

This comment has been minimized.

Show comment Hide comment
@vivekannan

vivekannan 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);

@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.

Show comment Hide comment
@jasminejeane

jasminejeane May 31, 2017

@vivekannan worked like a charm. Thank you

@vivekannan worked like a charm. Thank you

@maxIrvine

This comment has been minimized.

Show comment Hide comment
@maxIrvine

maxIrvine Jul 18, 2017

Super helpful! Thank you!

Super helpful! Thank you!

@vibhorejaiswal

This comment has been minimized.

Show comment Hide comment
@vibhorejaiswal

vibhorejaiswal Jul 19, 2017

Thank you very much !!

It worked great !!

Thank you very much !!

It worked great !!

@ashishsurana

This comment has been minimized.

Show comment Hide comment
@ashishsurana

ashishsurana 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

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.

Show comment Hide comment
@theo-armour

theo-armour 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.

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.

@AdagioLeopard

This comment has been minimized.

Show comment Hide comment
@AdagioLeopard

AdagioLeopard 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...

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.

Show comment Hide comment
@baladkb

baladkb Oct 12, 2017

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

baladkb commented Oct 12, 2017

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

@truongphucuong

This comment has been minimized.

Show comment Hide comment
@truongphucuong

truongphucuong 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 !!!

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.

Show comment Hide comment
@linhnt2803

linhnt2803 Oct 30, 2017

Love you <3 <3

Love you <3 <3

@satriowibowo123

This comment has been minimized.

Show comment Hide comment
@satriowibowo123

satriowibowo123 Oct 31, 2017

Thank You very much @chinchang

Thank You very much @chinchang

@demircancelebi

This comment has been minimized.

Show comment Hide comment
@demircancelebi

demircancelebi Nov 21, 2017

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

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

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

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

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