【问题标题】:Parse attributes of RSS feed with jquery使用 jquery 解析 RSS 提要的属性
【发布时间】:2013-01-05 12:45:58
【问题描述】:

我正在将 tumblr 博客中的 rss 提要解析到我的网站上。我正在尝试做的是使用 jQuery 来解析提要中的一些特定信息。下面是一个sn-p:

<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/",因为这将帮助我确认提要实际上是来自 tumblr 博客。

然而,问题是我对如何做到这一点有点困惑。我一直在尝试使用以下内容:

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

其中 blogUrl 是相关 rss 提要的 url。我已经尝试了很多变化 - 如此之多以至于我开始绕圈子 - 所以我想我会在这里问。我尝试将 'atom:link' 更改为 'atom\:link' 并将 '.text()' 添加到 find 命令的末尾,但没有运气。除了开头的atom:link数据,我也可以得到整个频道的全文,很接近但也不对!

那么,我怎样才能获得我所追求的信息?我看到的所有代码指南和以前的问题都集中在迭代 rss 提要中的多个重复项(这当然是有道理的,因为这是你应该对 rss 提要执行的操作),但我只是想确认所选的 Feed 是预期的正确类型的 Feed。

谢谢!


更新:感谢 Jasd 提供的以下帮助,我得以完成这项工作。这是更新的代码。

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

【问题讨论】:

    标签: javascript jquery xml rss


    【解决方案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 插件,它应该可以更轻松地查询带有命名空间的元素)。

    【讨论】:

    • 谢谢!这看起来很棒 - 但不幸的是,我似乎无法让它表现出来。在$.get 的回调函数中,该函数接收“数据”,当我使用console.log(data) 时,它作为#document 对象出现,然后我可以正确浏览。但是,当我尝试使用 DOMParser() 时,它拒绝执行任何操作并声称“文档为空”。我在想我需要将返回的 #document 对象更改为更符合 DOMParser 期望的东西 - 有什么想法吗?
    • 实际上,从头开始 - 你的方法奏效了!我将更新上面的代码以反映我所做的。再次感谢,你摇滚:D
    猜你喜欢
    • 2016-01-17
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2012-11-08
    • 2012-06-12
    相关资源
    最近更新 更多