1

Romeを使用して、複数のフィードを 1 つに結合しています。これは主に、Rome サイトのこの例に基づいています。

RSS 2.0 フィードを作成しています。これを (W3C) ドキュメントとして保存し、スタイルシートに渡して HTML に変換します。

私の要件の 1 つは、各エントリのソース (元のサイトへのリンクと名前) を表示することです (さまざまなソースから取得できるため)。

RSS 仕様によると、アイテムごとにオプションの source 属性があります。そして、Rome は SyndEntry インターフェイスの setSource メソッドでこれをサポートしているようです。ただし、これを元のフィードの SyndFeed に設定しても、この属性は設定されないようです。

出力したドキュメントの項目に source 要素が含まれていません。

私が間違っている可能性があることについての手がかりや、やりたいことを行うための代替方法に関する提案はありますか?

前もってありがとう、ダレン。

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.properties を配置するだけです。dublin コアを 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 に答える