我正在使用以下解析器来解析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!');
});
我知道这是一个具体的问题,但我将非常感谢您的帮助和/或建议......
提前致谢 佩德罗
答案 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);