2

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

<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");
    }
4

1 回答 1

1

因为冒号分隔的标签名称 likeatom: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(另请参阅JavaScript 中变量字符串的 XML 解析)。

更新:使用 jQuery 时,您可以使用$(doc).find("atom\\:link").attr("href")命名空间查询标签(有关更多详细信息,请参见http://www.rfk.id.au/blog/entry/xmlns-selectors-jquery/和一个 jQuery 插件,它应该使用命名空间更容易)。

于 2013-01-05T13:10:50.247 回答