1

我正在使用罗马将多个提要合并为一个。它主要基于罗马网站上的这个例子。

我正在创建一个 RSS 2.0 提要,我将其保存为 (W3C) 文档,然后传递给样式表以转换为 HTML。

我的要求之一是显示每个条目的来源(链接和原始站点的名称)(因为它们可以来自各种来源)。

根据 RSS 规范,每个项目都有一个可选的源属性。Rome 似乎通过 SyndEntry 接口上的 setSource 方法来支持这一点。但是,将此设置为原始提要的 SyndFeed 似乎不会设置此属性。

我输出的文档在项目中不包含源元素。

关于我可能做错了什么的任何线索或关于做我想做的事情的替代方法的建议?

在此先感谢,达伦。

4

2 回答 2

2

我知道响应有点晚了,但也许以后有人会使用它。我已经用罗马 1.0 做到了。

您可以定义自己的转换器和生成器。

我需要一个 RSS 2.0 提要,其中包含项目中的源字段。因此,对于转换器和生成器,我都通过 ROME 扩展了 RSS 2.0 的实现。

首先我们需要一个转换器。这是一个将填补源头的人

/**
 * This is a convertor for RSS 2.0 setting source on output items
 */
public class ConverterForRSS20WithSource extends ConverterForRSS20 {

    /**
     * Default Constructor
     */
    public ConverterForRSS20WithSource() {
        this("rss_2.0_withSource");
    }

    /**
     * Constructor with type
     * @param type
     */
    protected ConverterForRSS20WithSource(String type) {
        super(type);
    }

    /** 
     * @see com.sun.syndication.feed.synd.impl.ConverterForRSS094#createRSSItem(com.sun.syndication.feed.synd.SyndEntry)
     */
    @Override
    protected Item createRSSItem(SyndEntry sEntry) {
        Item item = super.createRSSItem(sEntry);
        if(sEntry.getSource() != null 
                && StringUtils.isNotBlank(sEntry.getSource().getUri())) {
            Source s = new Source();
            s.setUrl(sEntry.getSource().getUri());
            s.setValue(sEntry.getSource().getTitle());
            item.setSource(s);
        }

        return item;
    }
}

然后我们需要一个生成器。它没有什么特别可做的。它必须是

/**
 *  Rss 2.0 Generator with source field
 */
public class RSS020GeneratorWithSource extends RSS20Generator {

    /**
     * 
     */
    public RSS020GeneratorWithSource() {
        super("rss_2.0_withSource","2.0");
    }

}

我们需要做最后一件事,向 rome 声明我们的类。为此,只需将 rome.properties 放在资源的根目录下即可。不要忘记将都柏林核心添加到您的 rss.items... 在该文件中只需放入

Converter.classes=my.package.ConverterForRSS20WithSource

WireFeedGenerator.classes=my.package.RSS020GeneratorWithSource

# Parsers for RSS 2.0 with source item modules
#
rss_2.0_withSource.item.ModuleParser.classes=com.sun.syndication.io.impl.DCModuleParser

# Generators for RSS_2.0 entry modules
#
rss_2.0_withSource.item.ModuleGenerator.classes=com.sun.syndication.io.impl.DCModuleGenerator

就这样。

于 2011-12-14T13:49:47.833 回答
1

我现在已经找到了解决方法。

由于我真的只需要给出一个名称作为属性,因此我将覆盖作者字段,如下所示。

SyndEntry entry = // fetched from SyndFeed
Module dcModule = entry.getModule(DCModule.URI);
String title = // My overridden title
if (dcModule != null && title != null) {
    ((DCModule)dcModule).setCreator(title);
}

我使用此代码而不是 SyndEntry.setAuthor 的原因是调用仅在作者为 null 时设置作者,我们需要始终将其设置为我们的值。

然后我在我的 XSL 样式表中将其引用为 dc:creator。

于 2009-08-03T13:54:58.557 回答