2009-12-29 94 views
0

我想解析來自XMLHttpRequest(用於Firefox擴展)的xml。在下面的代碼中,req是一個XMLHttpRequest對象。聲明req後我做了req.overrideMimeType("text/xml");JavaScript中的XML解析

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

如果我使用req.responseXml我得到一個錯誤說「xmlDoc中未聲明」爲xmlDoc = req.responseXml;後再行如果我使用req.responseTextxmlDoc.readyState == 4變成假的。

我不做很多的JavaScript,所以請告訴我,如果我在這裏做錯了什麼。

+0

'xmlDoc.readyState'沒有意義,因爲'xmlDoc'是一個XML *文檔*不是XMLHttpRequest。 – MatrixFrog 2011-03-16 01:11:03

回答

0

海chanux,

也許這將幫助你瞭解basics of xml parser

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

AJAX responseXML errors

或嘗試改變

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

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

或使用該功能,並改變它爲你...

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

我一般喜歡使用responseText,然後解析使用內置的XML解析庫瀏覽器的XML。之後,我通常會將生成的XML文檔樹或子樹轉換爲JSON,以便在JavaScript中訪問。

我寫了一個小工具庫這個位置:

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

的用法很簡單:

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

+1這對我來說最有意義 – 2009-12-29 05:21:31

+1

我可以從服務器獲得直接的JSON回覆。所以我現在使用JSON格式。感謝名單。 – chanux 2009-12-29 06:07:25

0

你需要使用DOM?如果沒有,請使用E4X。它是那樣簡單

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

如果響應包括XML聲明(<?xml version="...">),用這個來代替:

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