2009-12-04 6 views
0

У меня есть запрос Ajax к XML-документу. XML-документ является RSS-каналом. Вот мой onSuccess по запросу:MooTools: Parsing Ajax responseTree

onSuccess: function(responseTree) { 
// process <item> elements 
} 

Как перечислить <item> элементы и получить различные значения ребенка?

ответ

1

Событие success также возвращает XML-объект, если для типа содержимого вызываемого файла установлено значение text/xml. Однако будьте осторожны, это невозможно, если вы вызываете файл на другом сервере - это не междоменный. Вы можете использовать объект Request для вызова файлов в том же домене.

Пример кода, который перечисляется через элементы item;

new Request({ 
    url: '/your-rss-parser.php', 
    method: 'get', 
    onSuccess: function(responseText, responseXML) { 
     responseXML.getElements('item').each(function(item) { 
      alert(item.getElement('title').get('text')); 
     }); 
    } 
}).send(); 
+0

Так что это правильный путь для получения и разбора RSS-канала в JavaScript, так как каналы, как правило, от другого сервера? – noio

0

У меня возникли проблемы с решением Björn для работы в классе. У меня есть XML

<?xml version="1.0" encoding="utf-8"?> 
    <countries> 
     <country> 
      <name>Argentina</name> 
      <id>1</id> 
     </country> 
     <country> 
      <name>Australia</name> 
      <id>2</id> 
      <climate>Hot</climate> 
     </country> 
     <country > 
      <name>France</name> 
      <id>3</id> 
     </country> 
    </countries> 

и JS

var requestXML = new Class({ 

    initialize: function(){ 
     var req = new Request({ 
      method: 'post', 
      autoCancel: true, 
      url: 'data.xml', 
      onSuccess: function(text, xml){ 
       xml.getElements('country').each(function(country) { 
        alert(item.getElement('country').get('text')); 
      }); 
      }.bind(this) 
     }).send(); 
    }, 

});  

window.addEvent('domready', function() { 

    var request = new requestXML(); 

}); 

Но сценарий не делает getElement на объект XML - Chrome жалуется "Uncaught TypeError: Объект # не имеет какого-либо метода" getElement".

Я получил эту другую версию работает в Chrome (начитавшись о таинственных Slick методов in this post)

var requestXML = new Class({ 

    initialize: function(){ 
     var req = new Request({ 
      method: 'post', 
      autoCancel: true, 
      url: 'data.xml', 
      onRequest: function(){ 
       // 
      }.bind(this), 
      onSuccess: function(text, xml){ 
       this.parseXML(xml); 
      }.bind(this), 
      onFailure: function(transport){ 
       alert('XML loading error'); 
      } 
     }).send(); 
    }, 

    parseXML: function(xml){ 
     var firstCountry = Slick.find(xml, 'country name'); 
     // Finds first matching element 
     // Returns <name>Argentina</name> 
     var countries = Slick.search(xml, 'country'); 
     // Finds all matching elements 
     // Returns [<country>...</country>, <country>...</country>, ... ] 
     var output = ''; 
     countries.each(function(item, index){ 
      var id = item.getElement('id').get('text'); 
      var name = item.getElement('name').get('text'); 
      var climate = item.getElement('climate'); 
      if (climate){ 
       climate = climate.get('text'); 
      } else { 
       climate = ''; 
      } 
      output += id + ' ' + name + ' ' + climate + '<br>'; 
     }); 
     $('container').set('html', output); 
    } 

});  

window.addEvent('domready', function() { 

    var request = new requestXML(); 

}); 

Но он ломает в IE, который говорит: «Объект не поддерживает это свойство или метод» на линия var id = item.getElement('id').get('text');. Это похоже на проблему с getElement() в решении стиля Björn.

Может кто-нибудь нам посоветуете? Документация для Mootools кажется бедной по сравнению с JQuery, и я не могу найти много полезной информации о том, как анализировать XML.

Приветствие И наконец

+0

Проверьте свой RSS-канал, чтобы убедиться, что есть элемент с именем ID. – R0b0tn1k