(你不能有多少google.)一旦你有
worked around the Same Origin Policy,如果资源被提供与一个
XML MIME type(其中的
it is in this case,文本/ xml),您可以执行以下操作:
var x = new XMLHttpRequest();
x.open("GET", "http://feed.example/", true);
x.onreadystatechange = function () {
if (x.readyState == 4 && x.status == 200)
{
var doc = x.responseXML;
// …
}
};
x.send(null);
(另请参见AJAX和XMLHttpRequest Level 2规范[工作草案]其他事件处理程序属性.)
实质上:不需要解析.如果您要访问XML数据,请使用标准的DOM Level 2+ Core或DOM Level 3 XPath方法,例如.
/* DOM Level 2 Core */
var title = doc.getElementsByTagName("channel")[0].getElementsByTagName("title")[0].firstChild.nodeValue;
/* DOM Level 3 Core */
var title = doc.getElementsByTagName("channel")[0].getElementsByTagName("title")[0].textContent;
/* DOM Level 3 XPath (not using namespaces) */
var title = doc.evaluate('//channel/title/text()', doc, null, 0, null).iterateNext();
/* DOM Level 3 XPath (using namespaces) */
var namespaceResolver = (function () {
var prefixMap = {
media: "http://search.yahoo.com/mrss/",
ynews: "http://news.yahoo.com/rss/"
};
return function (prefix) {
return prefixMap[prefix] || null;
};
}());
var url = doc.evaluate('//media:content/@url', doc, namespaceResolver, 0, null).iterateNext();
(另见JSX:xpath.js,一个方便的,名称空间感知的DOM 3 XPath包装器,不使用jQuery.)
但是,如果出于某些(错误)原因,MIME类型不是XML MIME类型,或者如果DOM实现无法识别,则可以使用最新浏览器中内置的解析器来解析responseText属性值.有关在IE / MSXML中使用的解决方案,请参阅pradeek’s answer.以下应该在其他地方工作:
var parser = new DOMParser();
var doc = parser.parseFromString(x.responseText, "text/xml");
按照上述步骤进行.
在运行时使用功能测试来确定给定实现的正确代码分支.最简单的方法是:
if (typeof DOMParser != "undefined")
{
var parser = new DOMParser();
// …
}
else if (typeof ActiveXObject != "undefined")
{
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
// …
}