我正在尝试为500px.com构建一个RSS阅读器...我试图使用此函数抓取并将xml文件的所有元素排序为JS对象:
function XML2jsobj(node) {
var data = {};
// append a value
function Add(name, value) {
if (data[name]) {
if (data[name].constructor != Array) {
data[name] = [data[name]];
}
data[name][data[name].length] = value;
}
else {
data[name] = value;
}
};
// element attributes
var c, cn;
for (c = 0; cn = node.attributes[c]; c++) {
Add(cn.name, cn.value);
}
// child elements
for (c = 0; cn = node.childNodes[c]; c++) {
if (cn.nodeType == 1) {
if (cn.childNodes.length == 1 && cn.firstChild.nodeType == 3 || cn.childNodes.length == 1&& cn.firstChild.nodeType === 4) {
// text value
Add(cn.nodeName, cn.firstChild.nodeValue);
}
else {
// sub-object
Add(cn.nodeName, XML2jsobj(cn));
}
}
}
return data;
} 所有东西都是花花公子并正确地给我一个每个可用的描述图像的数组,但是,它没有给我一个包裹在CDATA标签周围的参考,如下所示:
项目数组(底部图片)正确地给了我所有可用的图片;但是在描述标签中,它给了我一个未定义的对象,而不是给我一个" img src = ..."我正在寻找..如果它提供了更多信息,请点击我的启动代码:url = https://500px.com/popular.rss
var url = 500px.com/popular.rss;
function startApp(url){
var url1 = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%20%3D%20'"+url+"'";
function createTree(){
$.get(url1, function (data) {
console.log("data:",data);
var items = XML2jsobj(data.getElementsByTagName('channel')[0]);
console.log("Data / Channel:",data.getElementsByTagName('channel')[0]);
var test = data.getElementsByTagName('channel')[0];
responseFeed = items;
console.log("items:",items);
});
}
createTree();
}
答案 0 :(得分:0)
您可以使用.text()
获取所有.textContent
元素中的description
,.match()
和RegExp
/<img\s.+>(?=<)/g
来获取{{1}数组1}}元素作为文本,可以使用<img>
jQuery()
function startApp(url) {
var url1 = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%20%3D%20'" + url + "'";
function createTree() {
$.get(url1, function(data) {
var images = $(data.documentElement)
.find("description")
.text()
.match(/<img\s.+>(?=<)/g);
var srcs = $.map(images, function(img) {
return $(img).attr("src")
});
console.log(images, srcs);
});
}
createTree();
}
startApp("http://500px.com/popular.rss")