javascript getElementsByTagName排除某些标签

时间:2014-01-08 21:28:09

标签: javascript parsing xml-parsing rss atom-feed

在我的项目中,我正在尝试解析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开头的链接标记: 有没有办法避免它们?

由于

2 个答案:

答案 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);
}