如何在正确包含CDATA部分的情况下将XML正确转换为JS对象

时间:2017-06-09 17:37:52

标签: javascript jquery html xml rss

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

http://imgur.com/a/pneSy

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

}

1 个答案:

答案 0 :(得分:0)

您可以使用.text()获取所有.textContent元素中的description.match()RegExp /<img\s.+>(?=<)/g来获取{{1}数组1}}元素作为文本,可以使用<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(/<img\s.+>(?=<)/g);
        
      var srcs = $.map(images, function(img) {
                   return $(img).attr("src")
                 });
                 
      console.log(images, srcs);
      
    });
  }
  createTree();
}

startApp("http://500px.com/popular.rss")