使用jquery解析RSS feed的属性

时间:2013-01-05 12:45:59

标签: javascript jquery xml rss

我正在将来自tumblr博客的rss feed解析到我的网站上。我尝试做的是使用jQuery解析feed中的一些特定信息。以下是一个片段:

<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>

现在,我想要做的是从Feed中获取 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 Feed的网址。我已经尝试了很多变化 - 这么多,所以我开始进入圈子 - 所以我想我会在这里问。我已经尝试将'atom:link'更改为'atom \:link'并在find命令的末尾添加'.text()',但没有运气。我还可以获得整个通道的全文,除了原子:开始时的链接数据,这是接近但不正确的!

那么,我怎样才能获得我追求的信息?我看到的所有代码指南和之前的问题都集中在迭代rss feed中的多个重复项目(这当然是有意义的,因为这是你应该用rss feed做的事情),但我只是想尝试确认所选的Feed是预期的正确Feed类型。

谢谢!


更新:感谢Jasd的以下帮助,我得到了这个功能。这是更新的代码。

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

1 个答案:

答案 0 :(得分:1)

因为冒号分隔的标记名称atom:link是指在不同的命名空间中定义的标记(atom是命名空间),所以如果没有命名空间,则无法查询它。您还必须提供要查找标记的命名空间的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插件可以更轻松地查询带有名称空间的元素。)