我正在将来自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");
}
答案 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插件可以更轻松地查询带有名称空间的元素。)