从XML节点选择Jquery IMG src

时间:2011-09-19 08:56:41

标签: jquery xml

有人可以建议是否可以从包含html的RSS提要节点中为每个图像提取图像src?

http://news.google.co.uk/news?ds=n&pq=news+pop&hl=en&sugexp=gsis,i18n%3Dtrue&cp=5&gs_id=34&xhr=t&q=music+pop&client=firefox-a&rls=org.mozilla:en-US:official&gs_upl=&bav=on.2,or.r_gc.r_pw.&biw=1440&bih=681&um=1&ie=UTF-8&output=rss

我们基本上想要列出来自Google RSS订阅源的故事,我可以访问描述/链接等,因为它们位于自己的节点内 - 但无法访问单个图像。

感激地收到任何建议

这是我的代码 -     $(函数(){     $获得( 'rss.php',{FEED_URL:“HTTP://news.google.co.uk/news DS = N&安培; PQ =弹出+ musicnews&安培; HL = EN&安培; sugexp = GSIS,I18N%3Dtrue&安培; CP = 9&安培; gs_id = 36&安培; XHR = T&安培; q =弹出+音乐&安培; gs_upl =安培; BAV = on.2,or.r_gc.r_pw&安培; BIW = 1440&安培;波黑= 681&安培; BS = 1&安培; UM = 1& ie = UTF-8& output = rss'},function(xml){// Grab rss.php,输入GET feed_url属性并将其设置为您想要的Feed的网址。

    $(xml).find("item").each(function() {

        var i = $(xml).find("item").index(this);

        var desc = $('item: description',xml).replace(/"/, '"');

        if(i < 2) {
                var newsTitleOne = $('item:eq(0) title',xml).text();
                var newsTitleTwo = $('item:eq(1) title',xml).text();
                $(".newsIOne .newsText .t").append(newsTitleOne);
                $(".newsITwo .newsText .t").append(newsTitleTwo);
                alert(hello);
        } else {
            $("ul").append("<li style='color: blue'>" + $(this).text() + "</li>");
        }
    });




});

});

干杯 保罗

1 个答案:

答案 0 :(得分:0)

在javascript中,您可以从任何类型的文本数据中读取数据,您只需要正确的解析或耐心即可。对于XML来说,它很容易,因为它适合本地处理XML,XML是HTML的基础。

使用jQuery会更容易,请参阅下面的示例。

var xml = "<rss version='2.0'><channel><title>RSS Title</title></channel></rss>",
    xmlDoc = $.parseXML( xml ),
    $xml = $( xmlDoc ),
    $title = $xml.find( "title" );

可在jQuery.parseXML() - jQuery API找到更多信息。

对于发布的Feed,它会比较复杂,因为图片是HTML编码的描述。

但HTML可以通过这样解码来解码。

var decoded = description
   .replace(/&amp;/g,'&')
   .replace(/&lt;/g,'<')
   .replace(/&gt;/g,'>')
   .replace(/&quot;/, '"');

因此,您解析Feed,获取描述,解码并再次解析描述,就像img元素一样。 如果这对您来说太过分了,而且图像源使用Regex来提取它。

/(?: src=&quot;)(.+)(?:&quot;)/

这样的事情可以胜任。

鉴于你的例子,它会是这样的。

function (xml) { 

     var items = $(xml).find('item');
     for (var i = 0; i < items.length; i++) {

         var description = items.eq(i).find('description');


         //Alternative 1
         var descElem = $.parseXML(
             description
             .replace(/&amp;/g, '&')
             .replace(/&lt;/g, '<')
             .replace(/&gt;/g, '>')
             .replace(/&quot;/, '"')
         );
         var imgSrc = $(descElem).find('img').attr('src');


         //Alternative 2
         var imgSrc = /(?: src=&quot;)(.+)(?:&quot;)/.exec(descrition); 
         //null if don't exist

         (...)
     }

 }