You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用原生JavaScript获取RSS中<content:encoded>节点的内容?

原生JavaScript获取RSS中content:encoded节点的解决方案

嘿,这个问题我太熟悉了!带命名空间的XML元素在原生JS里确实不能直接用content\\:encoded这种写法来获取,jQuery帮我们做了底层的兼容处理,但原生JS得用专门的命名空间方法才行。

问题原因

<content:encoded>节点属于http://purl.org/rss/1.0/modules/content/这个命名空间,原生getElementsByTagName无法正确解析带命名空间前缀的标签名,必须用**getElementsByTagNameNS**方法来指定命名空间URI和标签名。

修正后的代码

把你注释掉的那行替换成下面的写法,就能正常获取内容了:

var contentNode = item.getElementsByTagNameNS('http://purl.org/rss/1.0/modules/content/', 'encoded').item(0);
var content = contentNode ? contentNode.textContent : ''; // 加个判断避免节点不存在时报错

完整的循环代码可以改成这样(顺便优化了DOM查找的性能):

var channel = xml.documentElement.getElementsByTagName("channel");
var items = xml.documentElement.getElementsByTagName("item");
var feedList = document.getElementById("feed"); // 提前获取DOM元素,避免循环内重复查找

for (var i = 0; i < items.length; i++) {
  var li = document.createElement('li');
  var item = items.item(i);
  
  var title = item.getElementsByTagName("title").item(0).textContent;
  var link = item.getElementsByTagName("link").item(0).textContent;
  // 获取content:encoded内容
  var contentNode = item.getElementsByTagNameNS('http://purl.org/rss/1.0/modules/content/', 'encoded').item(0);
  var content = contentNode ? contentNode.textContent : '';
  
  li.innerHTML = '<a href="' + link + '">' + title + '</a><br>' + content;
  feedList.appendChild(li);
}

关键说明

  • getElementsByTagNameNS的第一个参数是命名空间的完整URI(就是RSS里xmlns:content对应的值),第二个参数是不带前缀的标签名(也就是encoded,不是content:encoded)。
  • 加上节点存在性判断是个好习惯,防止某些RSS条目没有content:encoded节点时抛出错误。

内容的提问来源于stack exchange,提问作者Meek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:03:38