我需要在我的RSS Feed中包含HTML代码。我使用Java ROME RSS库:
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");
SyndContent syndContent = new SyndContentImpl();
syndContent.setType("text/html");
syndContent.setValue("<p>Hello, World !</p>");
entry.setDescription(syndContent);
entries.add(entry);
feed.setEntries(entries);
Writer writer = new FileWriter("rss.xml");
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, writer);
writer.close();
但输出XML包含编码说明:
<description><p>Hello, World !</p></description>
如何在ROME中正确包含未编码的HTML代码?
答案 0 :(得分:2)
根据RSS Best Practices Profile: 4.1.1.20.4 description:
描述必须适合以HTML格式呈现。必须使用HTML实体
<
("<"
)和>
(">"
)或CDATA
部分将HTML标记编码为字符数据。
因此,当前输出是正确的。
CDATA
编码如果需要CDATA
部分(CDATA
编码),可以使用以下代码:
final List<String> contents = new ArrayList<>();
contents.add("<p>HTML content is here!</p>");
final ContentModule module = new ContentModuleImpl();
module.setEncodeds(contents);
entry.getModules().add(module);
description
与content:encoded
我应该在RSS Feed项目中同时使用
description
和content:encoded
节点还是只使用其中一个节点?the following怎么样?
项目本身也可能是完整的,如果是这样,描述包含文本(允许实体编码的HTML;参见示例),&lt; ...&gt;
根据RSS 2.0规范,使用description
元素就足够了:完全如您所引用的那样。以下是示例:Encoding & item-level descriptions (RSS 2.0 at Harvard Law)。
有关其他详细信息,请参阅问题:Difference between description and content:encoded tags in RSS2 - Stack Overflow。