Programando o Intentndolo

Convertir XML a JSON con javaScript

Desde el punto de vista del intercambio de datos JSON es una alternativa mejor al XML o al menos para la mayoria de los casos ya que un JSON es m谩s legible, su conversi贸n es mas simple (sobre todo en javaScript que no hay que hacer nada 馃槈 (JSON, acr贸nimo de JavaScript Object Notation)) y tambi茅n ocupa menos espacio.

A pesar de todo sigue habiendo servicios web antiguos que usan XML y como es un proceso tedioso usarlo sobretodo cuando sabes que con JSON no hay que hacer nada, pues mejor hacer una vez una funci贸n que haga el trabajo sucio y convierta el xml a json.

Y la funci贸n es esta:

Poco m谩s de 50 lineas para convertir una respuesta XML en un objeto javaScript o lo que viene a ser lo mismo en un JSON.

Pese a ser una funci贸n recursiva y la complejidadad que eso proboca con los comentarios no deberia de ser dificil de entender, pero vamos con una peque帽a explicaci贸n:

El primer paso es comprobar el tipo de nodo del elemento padre del xml en cada momento y basicamente lo que se hace es convertir sus atributos en atributos del objeto si es un nodo de tipo ELEMENT_NODE (1), asignar el valor al objeto si es un texto (un elemento final de un xml) o marcar si es el elemento raiz del documento xml para posteriormente no crear un objeto con ese nombre.

Tanto el tratamiento del elemento raiz como el de los atributos es por gusto personal porque me parece innecesario tener un objeto con solo un objeto dentro porque solo puede llevar a confusi贸n y en lo referente a los atributos por simplicidad del objeto resultante final convertirlos directamente en objetos es una opci贸n valida teniendo en cuenta que estamos perdiendo la diferenciaci贸n entre atributos y nodos hijos, mantener esta diferenciaci贸n ser铆a tan simple como a帽adirle alguna marca a dichos atributos (ej. a帽adir algun prefijo como _) o crear un objeto atributos o algo similar y meterlos dentro de dicho objeto.

El segundo paso es tratar los elementos hijos del nodo raiz en cada momento haciendo basicamente la comprobaci贸n de si es un objeto o es un array (si hay varios nodos con el mismo nombre es un array) y desde cada hijo se recorre recursivamnete el xml para hacer la conversi贸n completa.

Y para terminar un ejemplo de xml y del json/objeto javaScript resultante:

Para hacer la prueba sin tener un xml de “verdad” podemos usar la funci贸n parseXML de jQuery para crear un xml a partir de una cadena de texto.