1

我使用 JAXB 编组器将 Java 类转换为 XML MRSS 文件。它看起来像这样:

public class RssBuilder {
    public void saveToFile( RSS rss, String fileName ) {
        JAXBContext jaxbContext = JAXBContext.newInstance( RSS.class );
        Marshaller marshaller = jaxbContext.createMarshaller();
        marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, true );

        NamespacePrefixMapper mapper = namespaceMapper;
        marshaller.setProperty( "com.sun.xml.bind.namespacePrefixMapper", mapper );

        marshaller.setProperty( Marshaller.JAXB_FRAGMENT, true );
        fos = new FileOutputStream( fileName );
        marshaller.marshal( rss, fos );
    }
}

@XmlRootElement
public class RSS {
    @XmlElement( name = "channel" )
    public List<RssChannel> getChannels() {return channels;}    
}

public class RssChannel {
    @XmlElement( name = "item" )
    private List<RssItem> items;
    public void setItems( List<RssItem> items ) { this.items = items; }
    public void addItem( RssItem item ) { this.items.add( item ); }
    ....
}

public class RssItem {
    @XmlElement (name = "description", namespace=RSS.YAHOO_XMLNS)   
    private MediaTitle mediaDescription;

    @XmlElement (name ="origReleaseDate", namespace=RSS.BING_XMLNS)
    private String origReleaseDate;
    ....
}

YAHOO 和 BING 有两种 MRSS 格式。BING MRSS 几乎相似,只是在 YAHOO 方案中添加了一些额外的元素,所以我在元素注释中使用了两个命名空间。以这种方式雅虎 MRSS 文件也包含 BING 模式的 xmnls 属性的问题,尽管没有“bing”元素。我可以创建单独的 RSS 根元素类来解决它,但它也会导致为频道和项目元素创建单独的类。

有没有更简单的方法来解决这个问题?

4

0 回答 0