我正在寻找一个解析XML字符串并将其转换为JavaScript对象的JavaScript库。什么是好的?
解析XML并返回一个与对应于xml的方案的JavaScript对象。具有相同名称的xml兄弟姐妹被折叠成数组。在arrayTags参数(标签名称字符串的数组)中可以找到具有名称的节点,即使在发生只有一个标签的情况下也总是使用数组。 arrayTags可以省略。只有空格的文本节点被丢弃。使用console.log(parseXml(myxml))来浏览输出
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" && xmlNode.nodeValue.trim() == "") { 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; }