【问题标题】:XML Parsing in JavascriptJavascript 中的 XML 解析
【发布时间】:2010-12-30 16:13:57
【问题描述】:

我正在尝试解析来自 XMLHttpRequest(用于 Firefox 扩展)的 xml。在下面的代码中, req 是一个 XMLHttpRequest 对象。我在声明 req 后做了req.overrideMimeType("text/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 = req.responseXml; 之后的行中收到错误提示“xmlDoc is not declared”如果我使用req.responseTextxmlDoc.readyState == 4 会变为 false。

我不会做太多 javascript,所以如果我在这里做错了,请告诉我。

【问题讨论】:

  • xmlDoc.readyState 没有意义,因为xmlDoc 是 XML 文档 而不是 XMLHttpRequest。

标签: javascript firefox-addon xml-parsing


【解决方案1】:

你需要使用 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();

【讨论】:

    【解决方案2】:

    我通常更喜欢使用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);
    

    【讨论】:

    • 我可以从服务器获得直接的 JSON 回复。所以我现在使用 JSON 格式。谢谢。
    【解决方案3】:

    海长,

    希望这可以帮助您了解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;   
                        }
                    }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多