Points de base
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; }
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);
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; } }
Donc, si Exemple.xml renvoie les données XML suivantes:
<?xml version="1.0"?><statuses><status><id>1</id><text>Hello!</text></status></statuses>
xml2jsobj (xhr.Responsexml.DocumentElement) renverra l'objet suivant:
{ status: { id: ["one", 1], text: "Hello!" } }
Par conséquent, vous pouvez utiliser obj.status.Text pour récupérer le "Hello!"
Précautions
quelques notes sur xml2jsobj:
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!