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

如何在Java ROME RSS库中正确嵌入未编码HTML代码?

如何使用Java ROME库在RSS中嵌入未编码的HTML内容

你遇到的问题其实是ROME库的默认行为——它会自动对<description>里的HTML内容做实体编码,这是为了适配RSS 2.0规范里对<description>元素的纯文本/转义HTML要求。如果要嵌入未编码的原生HTML,我们需要利用RSS的扩展元素<content:encoded>(这是被大多数阅读器支持的Atom规范扩展),ROME完全支持这个用法。

下面是修改后的完整代码,关键是添加content:encoded类型的内容项:

SyndFeed feed = new SyndFeedImpl();
feed.setFeedType("rss_2.0");
feed.setTitle("Title");
feed.setLink("example.com");
feed.setDescription("Description");

List<SyndEntry> entries = new ArrayList<>();
SyndEntryImpl entry = new SyndEntryImpl();
entry.setTitle("Name");

// 保留原有的description作为纯文本摘要(可选,也可设置转义后的HTML)
SyndContent plainDesc = new SyndContentImpl();
plainDesc.setType("text/plain");
plainDesc.setValue("Hello, World !");
entry.setDescription(plainDesc);

// 添加content:encoded元素,存放未编码的HTML
SyndContent htmlContent = new SyndContentImpl();
htmlContent.setType("text/html");
htmlContent.setValue("<p>Hello, World !</p>");
htmlContent.setMode("escaped"); // 关键:设置为escaped模式,避免编码
htmlContent.setName("content:encoded"); // 指定对应RSS的扩展元素

entry.getContents().add(htmlContent);

entries.add(entry);
feed.setEntries(entries);

Writer writer = new FileWriter("rss.xml");
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, writer);
writer.close();

关键说明:

  • 新增的SyndContent对象通过setName("content:encoded")绑定到RSS的扩展元素,这是原生HTML内容的标准存放位置
  • setMode("escaped")会告诉ROME不要对内容做实体编码,直接输出原始HTML代码
  • 保留原有的entry.setDescription()可以提供纯文本摘要,兼容不支持content:encoded的旧版阅读器

生成的XML会包含类似这样的结构:

<item>
  <title>Name</title>
  <description>Hello, World !</description>
  <content:encoded><p>Hello, World !</p></content:encoded>
</item>

这样就能在RSS中正确嵌入未编码的HTML代码了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:39:58