2014-01-08 116 views
1

在我的項目中,我試圖解析rss &原子提要。我針對每個飼料的鏈接與本:javascript getElementsByTagName排除某些標記

var feedLink = source.getElementsByTagName('link')[0]; 

一些飼料用

<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

嘗試坡平了從節點列表的結尾的鏈接,在這種情況下,它會爲這兩種情況下工作。

var x = source.getElementsByTagName('link'); 
var feedLink = x[(x.length - 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); 
 
}