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.

Show comment
Hide comment
@ScottBeeson

ScottBeeson commented May 17, 2016

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.

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.

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.

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.

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

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.

Show comment
Hide comment
@jasminejeane

jasminejeane May 31, 2017

@vivekannan worked like a charm. Thank you

jasminejeane commented May 31, 2017

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

maxIrvine commented Jul 18, 2017

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

vibhorejaiswal commented Jul 19, 2017

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

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.

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.

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.

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

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

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

linhnt2803 commented Oct 30, 2017

Love you <3 <3

@satriowibowo123

This comment has been minimized.

Show comment
Hide comment
@satriowibowo123

satriowibowo123 commented Oct 31, 2017

Thank You very much @chinchang

@demircancelebi

This comment has been minimized.

Show comment
Hide comment
@demircancelebi

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.

Show comment
Hide comment
@chhonmeily

chhonmeily Jun 7, 2018

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

chhonmeily commented Jun 7, 2018

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

@Teclogen

This comment has been minimized.

Show comment
Hide comment
@Teclogen

Teclogen Sep 5, 2018

Your Logic Building is strong. Keep it Up

Teclogen commented Sep 5, 2018

Your Logic Building is strong. Keep it Up

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