Объект XML в JavaScript - PullRequest
       14

Объект XML в JavaScript

25 голосов
/ 17 ноября 2010

Я ищу библиотеку JavaScript, которая анализирует строку XML и преобразует ее в объект JavaScript.Какие хорошие?

Ответы [ 3 ]

23 голосов
/ 18 октября 2013

анализирует XML и возвращает объект javascript со схемой, соответствующей 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;
}
5 голосов
/ 17 ноября 2010

Вот хороший конвертер xml2json и json2xml:

Вот еще один:

В зависимости от ваших потребностей, вы можете использовать стандартный анализатор (см. http://www.w3schools.com/XML/tryit.asp?filename=tryxml_parsertest2) и xpath (http://www.w3schools.com/xpath/default.asp) - вот пример:

и несколько хороших уроков:

0 голосов
/ 15 февраля 2013

Файл javascript xml2json из https://bitbucket.org/surenrao/xml2json - это все, что вам нужно для этого.

Вот ссылка для быстрой загрузки: https://bitbucket.org/surenrao/xml2json/get/0e0989dfe48e.zip

После включения в ваш проект вот пример кода, с которого можно начать:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...