2011-11-16 31 views
2

我正在使用com.sun.syndication apis解析我需要在我的應用程序中最終使用的RSS源。我面臨的問題是,對於一些RSS例如像RSS源解析通過ROME得到空作爲來源

http://rss.news.yahoo.com/rss/mostviewed 

如果我們有一些值的標籤下面的代碼返回null作爲源。

URL url = new URL("http://rss.news.yahoo.com/rss/mostviewed"); 
    XmlReader reader = null; 

    try { 
     reader = new XmlReader(url); 
     SyndFeed feed = new SyndFeedInput().build(reader); 
     System.out.println("Feed Title: "+ feed.getTitle()); 

     for (Iterator<SyndEntry> i =feed.getEntries().iterator(); i.hasNext();) { 
      SyndEntry entry = i.next(); 
       System.out.println("entry.getSource():"+entry.getSource()); 
     } 

是否有人有什麼可能只是缺少我這裏

回答

1

這似乎並沒有開箱的,因爲RSS 2.0的轉換器被忽略(可選)源元素的任何想法。

你可以寫你自己的轉換器,並從項目的源屬性中自己設置源。我把值(「AP」從你喂)到作者字段位置:

public class MyConverterForRSS20 extends ConverterForRSS20 { 

    public MyConverterForRSS20() { 
     this("rss_2.0"); 
    } 

    protected MyConverterForRSS20(String type) { 
     super(type); 
    } 

    @Override 
    protected SyndEntry createSyndEntry(Item item, boolean preserveWireItem) { 
     SyndEntry syndEntry = super.createSyndEntry(item, preserveWireItem); 
     Source source = item.getSource(); 
     if (source != null) { 
      SyndFeed syndFeed = new SyndFeedImpl(); 
      syndFeed.setLink(source.getUrl()); 
      syndFeed.setAuthor(source.getValue()); 
      syndEntry.setSource(syndFeed); 
     } 
     return syndEntry; 
    } 
} 

幸運的是,自定義轉換器可以很容易地通過改變rome.properties文件和設置MyConverterForRSS20代替com.sun.syndication.feed.synd.impl.ConverterForRSS20(最後一行的插入羅馬的文件):

# Feed Conversor implementation classes 
# 
Converter.classes=com.sun.syndication.feed.synd.impl.ConverterForAtom10 \ 
        com.sun.syndication.feed.synd.impl.ConverterForAtom03 \ 
        com.sun.syndication.feed.synd.impl.ConverterForRSS090 \ 
        com.sun.syndication.feed.synd.impl.ConverterForRSS091Netscape \ 
        com.sun.syndication.feed.synd.impl.ConverterForRSS091Userland \ 
        com.sun.syndication.feed.synd.impl.ConverterForRSS092 \ 
        com.sun.syndication.feed.synd.impl.ConverterForRSS093 \ 
        com.sun.syndication.feed.synd.impl.ConverterForRSS094 \ 
        com.sun.syndication.feed.synd.impl.ConverterForRSS10 \ 
        MyConverterForRSS20 
+0

感謝您的投入傑哈,它爲我工作... – vaibhav