2009-12-29 90 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();