2013-01-05 71 views
2

我正在将tslr博客的rss提要解析到我的网站上。我试图做的是使用jQuery来解析Feed中的一些特定信息。这里是下面的代码段:用jquery解析RSS提要的属性

<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> 
<channel> 
<atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/"/> 
[lots of stuff] 
</channel> 
</rss> 

现在,我希望做的就是HREF =“http://tumblr.superfeedr.com/”从进料,因为这将帮助我确认Feed实际上来自tumblr博客。

然而,问题在于我对于如何做到这一点卡住了一点。我一直在尝试使用以下内容:

$.get(blogUrl, 
function(data) { 
    var xml = $(data);   
    var foo = xml.find('atom:link').attr('href'); 
    alert("link href=" + foo); 
}); 

其中blogUrl是所讨论的rss提要的网址。我在这方面尝试了许多变化 - 这么多以至于我开始转圈了 - 所以我想我会在这里问。我尝试将'atom:link'改为'atom \:link',并将'.text()'添加到find命令的末尾,但没有运气。我也可以得到整个频道的全文,除了原子:链接数据在开始,这是接近但不是正确的!

那么,我怎么能得到我以后的信息呢?我所见过的所有代码指南和以前的问题都集中在通过rss提要中的多个重复项目进行迭代(这当然是有道理的,因为这就是你应该用rss提要做的),但我只是想确认所选饲料是预期的正确饲料类型。

谢谢!


UPDATE:由于下面的帮助下亚什德,我能得到这个工作。这是更新的代码。

$.get(blogUrl, 
    function(data) {  
     var doc = data.getElementsByTagNameNS("http://www.w3.org/2005/Atom", "link")[0]; 
     var href = dic.getAttribute("href"); 
    } 

回答

1

因为冒号分隔标签名称,如atom:link是指在不同的命名空间中定义的标签(​​是命名空间),你可以没有命名空间查询。您还必须提供您正在查找标记的名称空间的URL。

这是它是如何工作的Chrome(我想除了IE以外的其他浏览器)(错误检查略去了):

var xmlString = "<rss...>...</rss>"; 
var doc = new DOMParser().parseFromString(xmlString, "text/xml"); 
var elem = doc.getElementsByTagNameNS("http://www.w3.org/2005/Atom", "link")[0]; 
var href = elem.getAttribute("href"); 

我不知道是否jQuery提供其中一个抽象功能从此可以在所有浏览器上运行。如果不是,则在IE中使用ActiveXObject而不是DOMParser(另请参阅XML parsing of a variable string in JavaScript)。

更新:当使用jQuery你可以使用$(doc).find("atom\\:link").attr("href")与命名空间(见http://www.rfk.id.au/blog/entry/xmlns-selectors-jquery/的更多细节和一个jQuery插件,它应该与命名空间的查询元素更容易)查询标签。

+0

谢谢!这看起来很棒 - 但不幸的是,我似乎无法让它表现得很好。在$ .get的回调函数中,函数接收到“data”,当我使用console.log(data)时,它会以#document对象的形式出现,然后我可以正确浏览。但是,当我尝试使用DOMParser()时,它拒绝做任何事情并声称“文档是空的”。我在想,我需要更改#document对象,使其更符合DOMParser的期望 - 任何想法? – plone

+0

其实,从头开始 - 你的方法奏效了!我将更新上面的代码以反映我所做的。再次感谢,你摇滚:D – plone