Java ROME RSS库和RSS描述字段中的HTML代码

时间:2018-01-26 21:28:53

标签: java rss rome

我需要在我的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>&lt;p&gt;Hello, World !&lt;/p&gt;</description>

如何在ROME中正确包含未编码的HTML代码?

1 个答案:

答案 0 :(得分:2)

分析

根据RSS Best Practices Profile: 4.1.1.20.4 description

  

描述必须适合以HTML格式呈现。必须使用HTML实体&lt;"<")和&gt;">")或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);

其他参考资料

  1. RSS Best Practices Profile
  2. Putting content:encoded in RSS feed using ROME - Stack Overflow
  3. Re: CDATA Support - Mark Woodman - net.java.dev.rome.dev - MarkMail
  4. rome-modules/ContentModuleImplTest.java at master · rometools/rome-modules · GitHub
  5. descriptioncontent:encoded

      

    我应该在RSS Feed项目中同时使用descriptioncontent: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