Maison > interface Web > js tutoriel > Comment convertir XML en un objet JavaScript de type JSON

Comment convertir XML en un objet JavaScript de type JSON

Jennifer Aniston
Libérer: 2025-03-02 01:12:10
original
463 Les gens l'ont consulté

How to Convert XML to a JSON-Like JavaScript Object

Points de base

  • La fonction XML2JSOBJ convertit les données XML en objets JavaScript. Cette fonction analyse récursivement chaque nœud de l'arborescence DOM du document XML et renvoie un objet JavaScript, ce qui est plus pratique pour la récupération des données.
  • Bien que XML2JSOBJ soit une compatibilité entre les navigateurs et peut rapidement traiter de grands documents XML, il ne doit être utilisé que lorsqu'il est réellement nécessaire. Si vous ne récupérez qu'une ou deux valeurs de nœud XML, il est plus rapide d'utiliser la méthode DOM ou XPATH.
  • Le processus de conversion XML en objets JavaScript implique l'analyse des données XML et les convertir en un format que JavaScript peut comprendre et manipuler. Cela permet un accès et des opérations plus intuitifs et efficaces.

Dans l'article précédent "Comment créer XML vers JSON Proxy Server avec PHP", nous avons créé un système qui convertit les messages XML en JSON disponibles dans Ajax. C'est génial si vous exécutez PHP ou un autre processus côté serveur approprié. Mais que se passe-t-il si vous êtes limité à JavaScript? L'accès aléatoire aux données dans les documents XML n'est pas intéressant. Vous pouvez utiliser des méthodes DOM ou XPATH, mais elles ne sont pas aussi faciles que les propriétés d'objets JavaScript natives (générées par JSON) telles que myOBJ.List [0] .property1. Si vous accédez fréquemment aux données dans le même document XML, il peut être plus pratique de le convertir en un objet JavaScript en premier. Êtes-vous prêt à écrire du code? ...

Fonction xml2jsobj

Nous rédigerons une fonction qui analyse récursivement chaque nœud de l'arborescence DOM du document XML et renvoie un objet JavaScript. Cette fonction transmet un nœud de départ (généralement le document racine) et renvoie un objet (données nommées internes):

function XML2jsobj(node) {
    var data = {};

    // 添加值
    function Add(name, value) {
        if (data[name]) {
            if (data[name].constructor != Array) {
                data[name] = [data[name]];
            }
            data[name][data[name].length] = value;
        } else {
            data[name] = value;
        }
    };

    // 元素属性
    var c, cn;
    for (c = 0; cn = node.attributes[c]; c++) {
        Add(cn.name, cn.value);
    }

    // 子元素
    for (c = 0; cn = node.childNodes[c]; c++) {
        if (cn.nodeType == 1) {
            if (cn.childNodes.length == 1 && cn.firstChild.nodeType == 3) {
                // 文本值
                Add(cn.nodeName, cn.firstChild.nodeValue);
            } else {
                // 子对象
                Add(cn.nodeName, XML2jsobj(cn));
            }
        }
    }

    return data;
}
Copier après la connexion

Conversion XML

Nos appels ajax peuvent récupérer XML à partir du service Web:

// 示例 XML 提要
var url = "example.xml";

// AJAX 请求
var xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
xhr.onreadystatechange = XHRhandler;
xhr.open("GET", url, true);
xhr.send(null);
Copier après la connexion

Notre gestionnaire XMLHttpRequest OnreadyStateChange reçoit des données XML et la convertit en un objet JavaScript:

// 处理响应
function XHRhandler() {
    if (xhr.readyState == 4) {
        var obj = XML2jsobj(xhr.responseXML.documentElement);

        // 对返回的数据执行某些操作...
        console.log(obj);

        xhr = null;
    }
}
Copier après la connexion

Donc, si Exemple.xml renvoie les données XML suivantes:

<?xml version="1.0"?><statuses><status><id>1</id><text>Hello!</text></status></statuses>
Copier après la connexion

xml2jsobj (xhr.Responsexml.DocumentElement) renverra l'objet suivant:

{
    status: {
        id: ["one", 1],
        text: "Hello!"
    }
}
Copier après la connexion

Par conséquent, vous pouvez utiliser obj.status.Text pour récupérer le "Hello!"

Précautions

quelques notes sur xml2jsobj:

  1. Il n'y a pas de différence entre les attributs XML et les éléments enfants - s'ils ont le même nom, un tableau d'éléments sera retourné, où les attributs sont à l'index 0.
  2. xml2jsobj ne doit être utilisé que s'il est réellement nécessaire. Si vous ne récupérez qu'une ou deux valeurs de nœud XML, il est plus rapide d'utiliser la méthode DOM ou XPATH.
  3. Ce code est compatible avec les navigateurs croisés (y compris IE6) et peut rapidement traiter de grands documents XML. Cela dit, cela peut ne pas fonctionner dans tous les cas. Il ne devrait probablement pas avoir la priorité sur le renvoi JSON du serveur.

Vous pouvez afficher la page de démonstration ou télécharger du code et des exemples à utiliser avec votre propre projet. J'espère que vous le trouverez utile - si vous trouvez que cela atténue certains puzzles XML, faites-le moi savoir!

FAQs sur la conversion XML en objets JavaScript (Cette section a été rationalisée et ajustée en fonction du texte d'origine pour éviter la duplication)

Cette partie du contenu est répétée à partir du texte d'origine et a été omise. Le contenu de la FAQ dans le texte d'origine est redondant et n'est pas fortement corrélé avec les exemples de code, il est donc rationalisé dans le processus pseudo-original.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal