XML Javascript解析问题(具体代码问题)

时间:2010-09-30 13:28:50

标签: javascript jquery xml xml-parsing

我正在使用以下解析器来解析xml

function parseXML(text) {
    var doc;

    if(window.DOMParser) {
        var parser = new DOMParser();
        doc = parser.parseFromString(text, "text/xml");
    }
    else if(window.ActiveXObject) {
        doc = new ActiveXObject("Microsoft.XMLDOM");
        doc.async = "false";
        doc.loadXML(text);
    }
    else {
        throw new Error("Cannot parse XML");
    }

    return doc;
}

我无法理解为什么它不能处理通过AJAX获得的XML文档。

通过AJAX请求获得结果:

X-Powered-By    PHP/5.2.11
Content-Length  887
Keep-Alive  timeout=5, max=95
Connection  Keep-Alive
Content-Type    text/xml

<?xml version="1.0" encoding="UTF-8"?>
<xml_test>wont work!</xml_test>

测试代码:

    var xml = parseXML(data);
    $(xml).find("xml_test").each(function()
    {
        console.info('found xml_test... never happen..');
    });

但是,如果我像这样使用它可以很好地工作!

    var data = '<xml_test>works</xml_test>';
    var xml = parseXML(data);
    $(xml).find("xml_test").each(function()
    {
        alert('this works!');
    });

我知道这是一个具体的问题,但我将非常感谢您的帮助和/或建议......

提前致谢 佩德罗

4 个答案:

答案 0 :(得分:3)

如果您使用jQuery来请求您的资源,那么您应该已经获得了XML DOM文档,以防它是使用text / xml mime-type提供的。因此无需解析。

答案 1 :(得分:1)

我使用此功能并给我很好的结果:

var myLoadXml = function(s){

  var objxml = null;

  if(document.implementation && document.implementation.createDocument) {

     var objDOMParser = new DOMParser();
     objxml = objDOMParser.parseFromString(s, "text/xml");

  } else if (window.ActiveXObject) {

     objxml = new ActiveXObject('MSXML2.DOMDocument.3.0');
     objxml.async = false;
     objxml.loadXML(s);

  }

  return objxml;
};


var xml = myLoadXml(data);

$(xml).find("xml_test").each(function()
{
    console.info('found xml_test... never happen..');
});

修改 Example

**编辑II **

function parseXML(text) {
    var doc;

    if (typeof text == 'object'){ // check type of text
        return text; 
    }

    if(window.DOMParser) {
        var parser = new DOMParser();
        doc = parser.parseFromString(text, "text/xml");
    }
    else if(window.ActiveXObject) {
        doc = new ActiveXObject("Microsoft.XMLDOM");
        doc.async = "false";
        doc.loadXML(text);
    }
    else {
        throw new Error("Cannot parse XML");
    }

    return doc;
}

答案 2 :(得分:1)

如果您通过Ajax获取XML,则无需解析它,因为浏览器会为您执行此操作。只需使用XMLHttpRequest对象的responseXML属性,它将为您提供XML文档对象。 jQuery使用“{xml”为dataType

包装它
 $.ajax({
     type: "GET",
     url: "foo.xml",
     dataType: "xml",
     success: function(xml) {
         alert(xml.documentElement.nodeName);
     }
 });

答案 3 :(得分:0)

如果你正在使用jQuery(正如你的测试代码建议的那样),你可以简单地将xml传递给它。

var xml = $(data);