如何在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
相关产品推荐
相关产品推荐

