web-dev-qa-db-fra.com

Objet XML en JavaScript

Je recherche une bibliothèque JavaScript qui analyse une chaîne XML et la convertit en un objet JavaScript. Quels sont les bons?

23
Drew LeSueur

analyse XML et renvoie un objet javascript avec un schéma qui correspond au xml. xml frères et sœurs avec le même nom sont réduits dans des tableaux. Les nœuds dont le nom se trouve dans le paramètre arrayTags (tableau de chaînes de noms de balises) utilisent toujours des tableaux même si une seule occurrence de balise est trouvée. arrayTags peut être omis. les nœuds de texte avec des espaces uniquement sont ignorés. utilisez console.log (parseXml (myxml)) pour explorer le résultat

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;
}
22
Maylow Hayes
5
icyrock.com

Le fichier javascript xml2json de https://bitbucket.org/surenrao/xml2json est tout ce dont vous avez besoin pour faire cela.

Voici le lien de téléchargement pour téléchargement rapide: https://bitbucket.org/surenrao/xml2json/get/0e0989dfe48e.Zip

Une fois inclus dans votre projet, voici un exemple de code pour vous aider à démarrer:

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
0
Tom G