在我的项目中,我正在尝试解析rss&原子饲料。我用这个来定位每个Feed的链接:
var feedLink = source.getElementsByTagName('link')[0];
有些Feed直接以
开头<link>http://www.url.com</link>
但有些人会这样开始:
<atom:link href="http://www.url.com/feed/" rel="self" type="application/rss+xml" />
<link>http://www.url.com</link>
我正在使用的选择器也是以atom开头的链接标记: 有没有办法避免它们?
由于
答案 0 :(得分:0)
尝试从 NodeList 的末尾弹出链接,在这种情况下,它将适用于两种情况。
var x = source.getElementsByTagName('link');
var feedLink = x[(x.length - 1)]
不是最好的解决方案,但在这种情况下更快。
答案 1 :(得分:0)
您可以尝试使用getElementsByTagNameNS
,但我不确定它在各种浏览器中的支持程度。适用于最新的Chrome。
var xmlString = [
'<?xml version="1.0" encoding="utf-8"?>',
'<feed xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">',
'<atom:link href="http://www.example.com/feed/" rel="self" type="application/rss+xml" />',
'<link>http://www.example.com</link>',
'</feed>'
].join('\n');
var xml = (new DOMParser()).parseFromString(xmlString, "text/xml");
// Try regular search
var found = xml.getElementsByTagName('link');
for (var i = 0; i < found.length; i++) {
console.log('regular', i, found[i].nodeName);
}
// Try namespaced search
var foundNS = xml.getElementsByTagNameNS('http://www.w3.org/2005/Atom', 'link');
for (var i = 0; i < foundNS.length; i++) {
console.log('namespaced', i, foundNS[i].nodeName);
}