在C#中解析RSS或Atom Feed时,了解其常见XML结构和解析方式是关键。这两种格式都基于XML,用于发布网站更新、新闻等内容,但结构略有不同。使用.NET内置的
System.Xml或
SyndicationFeed类可以高效处理这些数据。
RSS Feed 常见结构与字段
RSS(Really Simple Syndication)通常以
<rss></rss>为根节点,版本多为2.0。主要结构如下:
<channel></channel>:包含频道信息,如标题、描述、链接等
<title></title>:频道或条目标题
<link>:频道或文章的URL
<description></description>:频道或条目的摘要
<item></item>:每个文章条目,可有多个
<pubdate></pubdate>:发布时间,格式通常为RFC 822
<guid></guid>:唯一标识符,用于去重
示例片段:
https://example.com
https://example.com/post1
Atom Feed 常见结构与字段
Atom 使用
<feed></feed>作为根元素,遵循RFC 4287标准,结构更规范:
<title></title>:Feed或条目标题
<link href="...">:使用属性表示URL,可能有多个(如self、alternate)
<id></id>:Feed或条目的唯一ID,常为URI
<updated></updated>:最后更新时间,ISO 8601格式
<entry></entry>:每篇文章条目
<published></published>:发布日期(可选)
<summary></summary>或
<content></content>:内容摘要或完整内容
示例片段:
使用 SyndicationFeed 解析(推荐方式)
.NET 提供了 SyndicationFeed 类(位于
System.ServiceModel.Syndication),可自动处理RSS和Atom,无需手动解析XML。
步骤如下:
添加引用:using System.ServiceModel.Syndication;使用
XmlReader读取Feed流 通过
SyndicationFeed.Load(reader)加载并解析
代码示例:
using var xmlReader = XmlReader.Create("https://example.com/feed.xml");if (SyndicationFeed.Load(xmlReader) is SyndicationFeed feed)
{
Console.WriteLine($"Feed Title: {feed.Title.Text}");
foreach (var item in feed.Items)
{
Console.WriteLine($"- {item.Title.Text} ({item.PublishDate})");
}
}
该方法优点:自动识别RSS/Atom、统一API、处理命名空间、日期转换等细节。
解析要点与注意事项
实际开发中需注意以下几点:
网络请求应使用HttpClient获取Feed内容,避免直接传URL给
XmlReader(不利于控制超时) 某些Feed可能包含HTML内容,提取
Summary或
Description时注意清理或转义 日期字段格式不一,
SyndicationFeed会自动转为
DateTimeOffset,建议统一处理 Atom使用默认命名空间,手动解析时必须正确处理命名空间前缀 GUID或ID可能不是URL,判断重复项时需结合源标识 部分Feed条目缺失字段(如无发布时间),需做空值检查
若需更高灵活性(如定制解析逻辑),也可用
XDocument配合命名空间进行LINQ to XML解析,但维护成本较高。
基本上就这些。使用
SyndicationFeed能覆盖大多数场景,简化开发并提高兼容性。
