Ответ 1
(Вы не можете много googled.) Как только вы работали вокруг одной и той же политики происхождения, и если ресурс обслуживается с помощью XML MIME type (который в этом случае, text/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 2 [Рабочий проект] для других свойств обработчика событий.)
По существу: Нет необходимости в синтаксическом анализе. Если вы хотите получить доступ к данным XML, используйте стандартный DOM Level 2+ Core или методы DOM уровня 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
значение свойства. См. pradeek answer для решения, которое работает в IE/MSXML. Следующее должно работать везде:
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");
// …
}
См. также DOMParser
и HTML5: DOM Parsing и Сериализация (рабочий проект).