如何在正确包含 CDATA 部分的同时将 XML 正确转换为 JS 对象



我正在尝试为 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 标签周围的引用,如下所示:

https://i.stack.imgur.com/tUIQw.jpg

项目数组(底部图片)正确地给了我所有可用的图片;但是在描述标签中,它给了我一个未定义的对象,而不是给我"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();

}

您可以使用.text()获取所有description元素的.textContent.match()使用RegExp/<imgs.+>(?=<)/g获取文本形式的<img>元素数组,可以使用jQuery()将其转换为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(/<imgs.+>(?=<)/g);

var srcs = $.map(images, function(img) {
return $(img).attr("src")
});

console.log(images, srcs);

});
}
createTree();
}
startApp("http://500px.com/popular.rss")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

最新更新