Frage

Ich bin mit Rom mehrere Feeds zu einem kombinieren. Es ist weitgehend auf dieses Beispiel auf der Rom-Website .

Ich erstelle einen RSS-2.0-Feed, die ich als (W3C) Dokument speichere dann zu einem Stylesheet übergeben zu HTML konvertieren.

Einer meiner Anforderungen ist die Quelle (Link auf und der Name des Ursprungsstandorts) angezeigt werden für jeden Eintrag (wie sie aus einer Vielzahl von Quellen stammen kann).

Nach dem RSS Spec gibt es eine optional Quellattribut pro Stück. Und Rom scheint dies mit einer setSource Methode auf der SyndEntry Schnittstelle zu unterstützen. Um jedoch die SyndFeed des ursprünglichen Feeds dieser Einstellung nicht erscheint dieses Attribut gesetzt.

Das Dokument I-Ausgang kein Quellenelement in dem Elemente enthalten.

Irgendwelche Hinweise auf das, was ich vielleicht falsch oder Vorschläge zu alternativen Methoden tun, zu tun, was ich tun will?

Vielen Dank im Voraus, Darren.

War es hilfreich?

Lösung 2

Ich habe eine Abhilfe für diese jetzt gefunden.

Da ich nur wirklich brauchen einen Namen als Zuschreibung geben ich den Autor Feld bin zwingende wie folgt.

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);
}

Der Grund, warum ich diesen Code anstelle von SyndEntry.setAuthor verwenden ist, dass fordern, dass nur der Autor setzt, wenn es null ist, müssen wir immer es unseren Wert gesetzt.

I Referenz diese dann als dc: creator in meinem XSL-Stylesheet

.

Andere Tipps

Ich weiß, es ist ein bisschen für die Antwort spät, aber vielleicht jemand wird diese später verwenden. Ich habe getan, es mit Rom 1.0.

Sie können definiert Ihren eigenen Konverter und Generator.

Mein Bedürfnis war ein RSS 2.0 Feed mit Quellfeld in Einzelteilen. Also sowohl für Umrichter und Generator erweitere ich die Implementierung von RSS 2.0 von ROME.

Zuerst müssen wir einen Konverter. Es ist derjenige, der die Quelle wird Füllung

/**
 * 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;
    }
}

Dann brauchen wir einen Generator. Es hat nichts Besonderes zu tun. Es musste einfach sein

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

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

}

Wir brauchen eine letzte Dinge zu tun, erklären unsere Klassen nach Rom. Dazu einfach ein rome.properties an der Wurzel Ihrer Ressourcen setzen. Vergessen Sie nicht, den Dublin Core zu Ihrem rss.items hinzuzufügen ... In dieser Datei setzen nur

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

Und das ist alles.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top