2009-12-04 4 views
0

XML 문서에 대한 Ajax 요청이 있습니다. XML 문서는 RSS 피드입니다. 여기에 요청에 대한 내 onSuccess는 다음과 같습니다MooTools : Ajax responseTree 구문 분석

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

어떻게 <item> 요소를 열거하고 다양한 자식 값을 검색 할 수 있습니까?

답변

1

호출 된 파일의 콘텐츠 형식이 text/xml으로 설정된 경우 success-event도 XML 개체를 반환합니다. 그러나 다른 서버에서 파일을 호출하는 경우에는 가능하지 않습니다. 교차 도메인이 아닙니다. 동일한 도메인의 파일을 호출하는 데만 요청 개체를 사용할 수 있습니다.

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 피드를 검색하고 분석 할 수있는 올바른 방법은 무엇인가? – 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(); 

}); 

에게있어하지만 스크립트는 XML 객체에 getElement하지 않습니다 - 크롬은 불만 "catch되지 않은 형식 오류 : 개체 번호가있는 방법 'getElement를'이 없습니다."

내가 크롬에서 작업이 다른 버전을했다

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(); 

}); 

(신비 슬릭 방법 in this post에 대해 읽은) 그러나 그것은의 "개체가이 속성 또는 메서드를 지원하지 않습니다"라고 IE에서 휴식 라인 var id = item.getElement('id').get('text');. 이는 Björn 스타일 솔루션의 getElement() 문제와 유사합니다.

아무도 우리에게 조언을 해줄 수 있습니까? Mootools에 대한 문서는 JQuery와 비교할 때 좋지 않은 것처럼 보이며 XML을 구문 분석하는 방법에 대한 유용한 정보를 찾을 수 없습니다.

건배 그리고 마지막으로

+0

RSS 피드를 확인하여 ID라는 요소가 있는지 확인하십시오. – R0b0tn1k