RSS XML必须以rss根元素声明version="2.0"、包含完整channel(含title/link/description)、每个item至少含title/link、pubDate须为RFC 822格式,且需用ElementTree生成并校验。

RSS Feed 是一种基于 XML 的标准格式,用来发布经常更新的内容(比如博客文章、新闻、播客),让订阅者能通过阅读器自动获取最新条目,无需手动访问网站。它不是某种服务或平台,而是一份结构化的 XML 文件,必须严格符合 RSS 规范才能被主流阅读器识别和解析。
RSS 的 XML 结构必须满足哪些基本要求
不是任意 XML 都算 RSS;必须使用 rss 根元素,并声明正确的命名空间与版本(最常用的是 RSS 2.0)。缺少 、、 或至少一个 ,多数阅读器会直接拒绝加载。
-
是唯一被广泛支持的根声明,version="0.91"或 Atom 混用会导致兼容性问题 -
内必须包含、、—— 缺一不可 - 每个
至少要有和,否则该条目会被忽略 -
必须是 RFC 822 格式(如Wed, 05 Jun 2024 14:23:11 +0000),用 ISO 8601 会解析失败
用 Python 快速生成合法 RSS XML 文件
手写 XML 容易出错,推荐用标准库 xml.etree.ElementTree 构建,避免标签闭合、转义、编码等问题。关键点在于:所有文本内容必须用 etree.SubElement() 添加,不能拼接字符串;日期需用 email.utils.formatdate() 转换。
import xml.etree.ElementTree as ET
from email.utils import formatdate
root = ET.Element("rss", version="2.0")
channel = ET.SubElement(root, "channel")
ET.SubElement(channel, "title").text = "我的技术笔记"
ET.SubElement(channel, "link").text = "https://example.com"
ET.SubElement(channel, "description").text = "每日更新的开发实践"
item = ET.SubElement(channel, "item")
ET.SubElement(item, "title").text = "如何调试 WebAssembly"
ET.SubElement(item, "link").text = "https://example.com/wasm-debug"
ET.SubElement(item, "description").text = "Chrome DevTools 中的 wasm source map 配置要点"
ET.SubElement(item, "pubDate").text = formatdate(usegmt=True)
tree = ET.ElementTree(root)
tree.write("feed.xml", encoding="utf-8", xml_declaration=True)
常见解析失败原因和验证方式
浏览器直接打开 feed.xml 显示为乱码或空白,不等于文件无效——RSS 阅读器只认 HTTP 响应头中的 Content-Type: application/rss+xml。本地文件协议(file://)多数阅读器根本不会加载。
- 用 W3C Feed Validation Service 在线校验,它会指出缺失字段、日期格式错误、未转义的
&或字符 - 确保服务器返回的
Content-Type是application/rss+xml,不是text/xml或application/xml - 所有 HTML 实体(如
&、)必须在中显式转义,不能依赖 CDATA 包裹(部分阅读器不支持) - 避免在
中使用等扩展标签,除非明确知道目标阅读器支持
真正难的不是写出 XML,而是让每个字段都落在 RSS 2.0 规范的“窄通道”里:日期格式、字符编码、HTTP 头、实体转义,任意一环松动,订阅就会静默失败——没人报错,只是内容不再出现。










