XML到JavaScript对象

Dre*_*eur 25 javascript xml json

我正在寻找一个解析XML字符串并将其转换为JavaScript对象的JavaScript库.什么是好的?

小智 23

解析XML并返回一个javascript对象w /与xml对应的方案.具有相同名称的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") {
            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 = {};
    for (let i = 0; i < dom.childNodes.length; i++)
    {
        parseNode(dom.childNodes[i], result);
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)


icy*_*com 5

这是一个不错的xml2json和json2xml转换器:

这是另一个:

根据您的需要,您可以使用标准解析器(请参阅http://www.w3schools.com/XML/tryit.asp?filename=tryxml_parsertest2)和xpath(http://www.w3schools.com/xpath) /default.asp) - 这是一个例子:

和一些很好的教程:

  • Goessner库的问题是它返回一个JSON字符串.您最终将XML字符串转换为JSON字符串,然后您必须解析_again_以获取实际的Javascript对象.它会起作用,但可能有一种更有效的方法. (11认同)