訂閱源主要分兩派:
| 特性 | RSS 2.0 | Atom 1.0 |
|---|---|---|
| 根元素 | <rss version="2.0"> | <feed xmlns="https://www.w3.org/2005/Atom"> |
| 頻道標題 | <title> | <title> |
| 頻道鏈接 | <link> | <link rel="alternate" href="..."/> |
| 文章容器 | <item> | <entry> |
| 文章標題 | <title> | <title> |
| 文章鏈接 | <link> | <link rel="alternate" href="..."/> |
| 發布時間 | <pubDate> (RFC822) | <updated> (ISO 8601) |
| 內容/摘要 | <description> | <content type="html"> / <summary> |
| 典型站點 | CSDN、新浪、網易 | 博客園、GitHub、YouTube |
結構相似,節點表達式不同。統一解析需抽象公共模型 (如 Rome 的 SyndFeed)。
SyndFeed/SyndEntry),但體積較大。本篇先用 rsslib4j-0.2.jar 驗證 RSS 解析流程。
package com.tgb.rssreader.manager;
import org.gnu.stealthp.rsslib.*;
import java.net.URL;
import java.util.List;
public class Rsslib4jReadRss {
public void parse(String rssUrl) {
try {
URL url = new URL(rssUrl);
RSSParser parser = new RSSParser();
parser.setXmlResource(url); // 內部會建立連接
RSSHandler handler = new RSSHandler();
parser.parse(handler);
RSSChannel channel = handler.getChannel();
System.out.println("頻道標題: " + channel.getTitle());
System.out.println("頻道鏈接: " + channel.getLink());
List<RSSItem> items = channel.getItems();
for (int i = 0; i < Math.min(1, items.size()); i++) { // 測試只取第一條
RSSItem item = items.get(i);
System.out.println("標題: " + item.getTitle());
System.out.println("鏈接: " + item.getLink());
System.out.println("描述: " + item.getDescription());
System.out.println("發布時間: " + item.getPubDate());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

403 Forbidden (拒絕 Java UA)。link/language 返回 null (Channel 節點順序導致解析遺漏)。description 含 HTML 標籤難直接展示。下一篇將自製 myrsslib4j,針對性修復上述三大問題,並打包為獨立 JAR 供項目使用。