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();