Анализ XML/RSS из URL с помощью Java Script - программирование
Подтвердить что ты не робот

Анализ XML/RSS из URL с помощью Java Script

Привет, я хочу разобрать xml/rss из живого url, например http://rss.news.yahoo.com/rss/entertainment, используя чистую Java Script (не jquery). Я много гугл. Ничто не сработало для меня. может ли кто-нибудь помочь с рабочей частью кода.

4b9b3361

Ответ 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 и Сериализация (рабочий проект).

Ответ 2

Одна большая проблема, с которой вы можете столкнуться, заключается в том, что вы не можете получить перекрестный домен данных. Это большая проблема с большинством rss-каналов.

Общим способом обработки данных в перекрестном домене javascript является вызов JSONP. В основном это означает, что данные, которые вы извлекаете, завернуты в функцию обратного вызова javascript. Вы загружаете URL-адрес тегом script, и вы определяете функцию в своем коде. Поэтому, когда загружается script, он выполняет функцию и передает данные в качестве аргумента.

Проблема с большинством xml/rss-каналов заключается в том, что службы, которые предоставляют только xml, как правило, не обеспечивают возможности JSONP-упаковки.

Прежде чем идти дальше, проверьте, предоставил ли ваш источник данных json-формат и функциональность JSONP. Это сделает это намного проще.

Теперь, если ваш источник данных не предоставляет функции json и jsonp, вам нужно создать объявление.

Относительно простой способ справиться с этим - использовать прокси-сервер. Ваш прокси работает где-то под вашим контролем и действует как посредник для получения ваших данных. Сервер загружает ваш xml, а затем ваш javascript делает запросы к нему. Если прокси-сервер работает под одним и тем же именем домена, вы можете просто использовать стандартные запросы xhr (ajax), и вам не нужно беспокоиться о вещах с междоменным доступом.

Кроме того, ваш прокси-сервер может обертывать данные в обратном вызове jsonp, и вы можете использовать упомянутый выше метод.

Если вы используете jQuery, то запросы xhr и jsonp являются встроенными методами и поэтому делают очень простое кодирование. Другие распространенные библиотеки js также должны поддерживать их. Если вы все это кодируете с нуля, это немного больше, но не очень сложно.

Теперь, как только вы получите свои данные, надеемся, это просто json. Тогда нет необходимости синтаксического анализа.

Однако, если вам в конечном итоге придется придерживаться xml/rss-версии, а если вы jQuery, вы можете просто использовать jQuery.parseXML http://api.jquery.com/jQuery.parseXML/,