0

我正在尝试解析来自 XMLHttpRequest 的 xml(用于 Firefox 扩展)。在下面的代码中, req 是一个 XMLHttpRequest 对象。我req.overrideMimeType("text/xml"); 在声明 req.

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

如果我使用,我会在If I usereq.responseXml之后的行中收到一条错误消息“未声明 xmlDoc” ,然后变为 false。xmlDoc = req.responseXml;req.responseTextxmlDoc.readyState == 4

我没有做太多的javascript,所以如果我在这里做错了什么,请告诉我。

4

3 回答 3

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);
于 2009-12-29T04:14:24.073 回答
0

海昌努,

希望这将帮助您了解 xml 解析器的基础知识

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

AJAX responseXML 错误

或尝试改变

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;   
                    }
                }
        }
    }
于 2009-12-29T03:49:27.370 回答
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();
于 2009-12-29T05:15:12.907 回答