2013-07-10 66 views
0

我試圖使用ROME解析一個RSS feed這樣讀站長領域:如何與羅馬

url = new URL("http://www.rssboard.org/files/sample-rss-2.xml"); 
XmlReader reader = new XmlReader(url); 
SyndFeedInput input = new SyndFeedInput(); 
SyndFeed feed = input.build(reader); 
System.out.println(feed.getAuthor()); 

但是,我無法找到一個方法來獲取「網管」字段或任何其他定製領域。

我已經從here瞭解了羅馬的自定義模塊,但我無法弄清楚如何使用它。我爲webMaster字段創建了一個類似的SamplleModuleSampleModuleImplSampleModule解析器,但我不知道如何使用它!

這一點,我已經實現了類: SamplleModule:

public interface SampleModule extends Module { 

     public static final String URI = 
"http://www.rssboard.org/files/sample-rss-2.xml"; 

    public String getWebMaster(); 

    public void setWebMaster(String webMaster); 

} 

SampleModuleImpl:

public class SampleModuleImpl extends ModuleImpl implements SampleModule { 

    private static final long serialVersionUID = 1L; 
    private String _webMaster; 

    protected SampleModuleImpl() { 
     super(SampleModule.class, SampleModule.URI); 

    } 

    @Override 
    public void copyFrom(Object obj) { 
     SampleModule sm = (SampleModule) obj; 
     setWebMaster(sm.getWebMaster()); 

    } 

    @Override 
    public Class getInterface() { 
     return SampleModule.class; 
    } 


    @Override 
    public String getWebMaster() { 
     return _webMaster; 
    } 

    @Override 
    public void setWebMaster(String webMaster) { 
     _webMaster = webMaster; 

    } 

} 

和SampleModuleParser:

public class SampleModuleParser implements ModuleParser { 

    private static final Namespace SAMPLE_NS = Namespace.getNamespace("sample", 
      SampleModule.URI); 

    @Override 
    public String getNamespaceUri() { 
     return SampleModule.URI; 
    } 

    @Override 
    public Module parse(Element dcRoot) { 
     boolean foundSomething = false; 
     SampleModule fm = new SampleModuleImpl(); 

     Element e = dcRoot.getChild("webMaster"); 
     if (e != null) { 
      foundSomething = true; 
      fm.setWebMaster(e.getText()); 
     } 

     return (foundSomething) ? fm : null; 
    } 

} 

我還添加了這些模塊羅馬。屬性。 我只是不知道如何在我的閱讀器方法中使用它們。 任何想法的人?

+0

其中rome.properties你加入了嗎?確保你爲你試圖分析的RSS版本的ModuleParser元素設置它。 –

+0

這不是問題所在。問題是我應該在我的代碼中添加什麼「getWebMaster」方法?我的意思是我的第一個代碼。 –

回答

0

看看這裏的如何做到這與MRSS模塊的示例:

http://ideas-and-code.blogspot.com/2009/07/media-rss-plugin-for-rome-howto.html

基本上你需要SyndEntry對象,並使用你的模塊命名空間,你得到你的模塊實例如果存在對象,那麼在你的情況下:

SampleModule myModule = (SampleModule)e.getModule(SampleModule.URI); 

然後你就可以使用它。我使用Groovy與羅馬爲我的解析器和做這樣的事情:

def mediaModule = entry.getModule("http://search.yahoo.com/mrss/") 
if(mediaModule) { 
mediaModule.getMediaGroups().each { group -> 
    group.contents.each { content -> 
     if(content.type != null && content.type.startsWith("image")) { 
     log.info "got an image" 
     String imgUrl = content.getReference().toString() 
     post.images.add(new MediaContent(type:'image',url:imgUrl)) 
     } 
    } 
    } 
} 

HTH