read - Objeto XML a JavaScript
title tag html (3)
Estoy buscando una biblioteca de JavaScript que analiza una cadena XML y la convierte en un objeto de JavaScript. ¿Cuáles son algunos buenos?
Aquí hay un buen conversor xml2json y json2xml:
- http://goessner.net/download/prj/jsonxml/
- Tutorial relacionado: http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html
Aqui hay otro más:
Dependiendo de sus necesidades, puede utilizar un analizador estándar (consulte http://www.w3schools.com/XML/tryit.asp?filename=tryxml_parsertest2 ) y xpath ( http://www.w3schools.com/xpath/default.asp ) - aquí hay un ejemplo:
y algunos buenos tutoriales:
El archivo javascript xml2json de https://bitbucket.org/surenrao/xml2json es todo lo que necesita para hacer esto.
Aquí está el enlace de descarga para una descarga rápida: https://bitbucket.org/surenrao/xml2json/get/0e0989dfe48e.zip
Una vez incluido en su proyecto, aquí hay algunos ejemplos de código para comenzar:
var xmlStr = "<root><person><name>Bob Dylan</name></person></root>";
var jsObj = X2J.parseXml(xmlStr);
var result = jsObj[0].root[0].person[0].name[0].jValue; //Bob Dylan
analiza XML y devuelve un objeto javascript con un esquema que corresponde al xml. Los hermanos xml con el mismo nombre se contraen en arreglos. Los nodos con nombres que se pueden encontrar en el parámetro arrayTags (matriz de cadenas de nombre de etiqueta) siempre se registran matrices, incluso en el caso de que solo ocurra una etiqueta. arrayTags puede ser omitido. Los nodos de texto con solo espacios son descartados. use console.log (parseXml (myxml)) para explorar la salida
parseXml(xml, arrayTags)
{
var dom = null;
if (window.DOMParser)
{
dom = (new DOMParser()).parseFromString(xml, "text/xml");
}
else if (window.ActiveXObject)
{
dom = new ActiveXObject(''Microsoft.XMLDOM'');
dom.async = false;
if (!dom.loadXML(xml))
{
throw dom.parseError.reason + " " + dom.parseError.srcText;
}
}
else
{
throw "cannot parse xml string!";
}
function isArray(o)
{
return Object.prototype.toString.apply(o) === ''[object Array]'';
}
function parseNode(xmlNode, result)
{
if (xmlNode.nodeName == "#text") {
var v = xmlNode.nodeValue;
if (v.trim()) {
result[''#text''] = v;
}
return;
}
var jsonNode = {};
var existing = result[xmlNode.nodeName];
if(existing)
{
if(!isArray(existing))
{
result[xmlNode.nodeName] = [existing, jsonNode];
}
else
{
result[xmlNode.nodeName].push(jsonNode);
}
}
else
{
if(arrayTags && arrayTags.indexOf(xmlNode.nodeName) != -1)
{
result[xmlNode.nodeName] = [jsonNode];
}
else
{
result[xmlNode.nodeName] = jsonNode;
}
}
if(xmlNode.attributes)
{
var length = xmlNode.attributes.length;
for(var i = 0; i < length; i++)
{
var attribute = xmlNode.attributes[i];
jsonNode[attribute.nodeName] = attribute.nodeValue;
}
}
var length = xmlNode.childNodes.length;
for(var i = 0; i < length; i++)
{
parseNode(xmlNode.childNodes[i], jsonNode);
}
}
var result = {};
if(dom.childNodes.length)
{
parseNode(dom.childNodes[0], result);
}
return result;
}