【问题标题】:javascript getElementsByTagName exclude certain tagsjavascript getElementsByTagName 排除某些标签
【发布时间】:2014-01-27 05:13:43
【问题描述】:

在我的项目中,我正在尝试解析 rss 和 atom 提要。我将每个提要的链接作为目标:

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 开头的链接标签: 有没有办法避免它们?

谢谢

【问题讨论】:

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


    【解决方案1】:

    尝试从NodeList的末尾弹出链接,在这种情况下,这两种情况都可以。

    var x = source.getElementsByTagName('link');
    var feedLink = x[(x.length - 1)]
    

    不是最好的解决方案,但在这种情况下更快。

    【讨论】:

      【解决方案2】:

      您可以尝试改用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);
      }

      【讨论】:

        猜你喜欢
        • 2021-07-06
        • 2013-02-19
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 2015-08-12
        • 1970-01-01
        • 2020-07-17
        • 2012-10-11
        相关资源
        最近更新 更多