【发布时间】:2011-03-31 02:46:18
【问题描述】:
我有一个对 XML 文档的 Ajax 请求。 XML 文档是一个 RSS 提要。这是我的onSuccess 请求:
onSuccess: function(responseTree) {
// process <item> elements
}
如何枚举<item> 元素并检索各种子值?
【问题讨论】:
标签: javascript xml rss mootools xmlhttprequest
我有一个对 XML 文档的 Ajax 请求。 XML 文档是一个 RSS 提要。这是我的onSuccess 请求:
onSuccess: function(responseTree) {
// process <item> elements
}
如何枚举<item> 元素并检索各种子值?
【问题讨论】:
标签: javascript xml rss mootools xmlhttprequest
如果被调用文件的内容类型设置为text/xml,成功事件也会返回一个XML 对象。但是,请注意,如果您在另一台服务器上调用文件,这是不可能的——它不是跨域的。只能使用 Request-object 调用同域的文件。
枚举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();
【讨论】:
我无法让 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 - Chrome 抱怨“未捕获的类型错误:对象 # 没有方法 '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'); 上显示“对象不支持此属性或方法”。这看起来类似于 Björn 样式解决方案中 getElement() 的问题。
有人可以给我们建议吗?与 JQuery 相比,Mootools 的文档似乎很差,而且我找不到太多关于如何解析 XML 的有用信息。
干杯 最后
【讨论】: