Analyse XML en Javascript

J'essaie d'analyser un xml à partir d'un XMLHttpRequest (pour une extension Firefox). Dans le code suivant, req est un objet XMLHttpRequest. J'ai req.overrideMimeType("text/xml"); Après avoir déclaré la requête.

 var shortURL; var xmlDoc = document.implementation.createDocument("","",null); xmlDoc.async = false; xmlDoc = req.responseXml; if (xmlDoc.readyState == 4){ shortURL = xmlDoc.documentElement.childNodes[8].text; } 

Si j'utilise req.responseXml j'ai une erreur en disant "xmlDoc n'est pas déclaré" pour la ligne après xmlDoc = req.responseXml; Si j'utilise req.responseText , xmlDoc.readyState == 4 devient faux.

Je ne fais pas beaucoup de javascript, alors dites-moi si je fais quelque chose de mal ici.

Je préfère généralement utiliser responseText , puis analyser le XML à l'aide de la bibliothèque d'analyse XML intégrée au navigateur. Après cela, je transforme généralement l'arbre de document XML résultant, ou un sous-arbre, en JSON pour un accès facile en JavaScript.

J'ai écrit une petite bibliothèque d'utilité pour ceci ici:

http://earth-api-samples.googlecode.com/svn/trunk/demos/myearth/lib/xmlutil.js

L'utilisation est assez simple:

 var json = xmlNodeToJson(parseXml(req.responseText); 

Hai chanux,

Cela vous aidera à connaître les bases de l'analyseur XML

http://www.hiteshagrawal.com/javascript/javascript-parsing-xml-in-javascript

AJAX responseXML errors

Ou essayez de changer

 shortURL = xmlDoc.documentElement.childNodes[8].Text; 

à

 shortURL = xmlDoc.documentElement.childNodes[8].firstChild.nodeValue; 

Ou utilisez cette fonction et changez-la pour la vôtre …

 function parseXML() { if (xmlDoc.readyState == 4 && xmlDoc.status == 200) { xmlDoc = xmlDoc.responseXML; regions = xmlDoc.getElementsByTagName("region"); for (var i = 0; i < regions.length; i++) { if (regions[i].getAttribute("id") == regID) { var browserName = navigator.userAgent; var isIE = browserName.match(/MSIE/); if (isIE) { var hotelprice = regions[i].childNodes[0].firstChild.nodeValue; var pkgprice = regions[i].childNodes[1].firstChild.nodeValue; } else { var hotelprice = regions[i].childNodes[1].textContent; var pkgprice = regions[i].childNodes[3].textContent; } document.getElementById("hotel").innerHTML = "$"+hotelprice; document.getElementById("package").innerHTML = "$"+pkgprice; } } } } 

Avez-vous besoin d'utiliser le DOM? Sinon, utilisez E4X . C'est aussi simple que

 shortURL = new XML(req.responseText).child(8).text(); 

Si la réponse inclut une déclaration XML ( <?xml version="..."> ), utilisez ceci à la place:

 shortURL = new XML(req.responseText.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, "")).child(8).text();