2009-12-29 5 views
0

J'essaye d'analyser un XML provenant d'une XMLHttpRequest (pour une extension Firefox). Dans le code suivant, req est un objet XMLHttpRequest. J'ai fait req.overrideMimeType("text/xml"); après avoir déclaré req.Analyse XML en Javascript

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 je req.responseXml je reçois une erreur disant « xmlDoc n'est pas déclarée » pour la ligne après xmlDoc = req.responseXml; Si je req.responseText, xmlDoc.readyState == 4 tourne faux.

Je ne fais pas beaucoup de javascript alors s'il vous plaît dites-moi si je fais quelque chose de mal ici.

+0

'xmlDoc.readyState' n'a pas de sens parce que' xmlDoc' est un XML * document * n'est pas un XMLHttpRequest. – MatrixFrog

Répondre

0

Hai chanux,

cette mai vous aidera à connaître basics of xml parser

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

AJAX responseXML errors

ou essayer de changer

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

à

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

ou utiliser cette fonction et le changer pour le 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; 
        } 
       } 
     } 
    } 
1

Je préfère généralement en utilisant responseText, puis l'analyse du XML à l'aide du navigateur intégré dans la bibliothèque d'analyse XML. Après cela, je convertis généralement l'arbre de document XML résultant, ou une sous-arborescence, en JSON pour un accès facile en JavaScript.

J'ai écrit une minuscule bibliothèque utilitaire pour cette 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); 
+0

+1 Cela me semble le plus logique –

+1

Je peux obtenir une réponse JSON directe du serveur. Donc j'utilise le format JSON maintenant. Merci. – chanux

0

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

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

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

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