2013-07-10 2 views
0

Я пытаюсь использовать ROME для разбора RSS-канал, как это:Как читать поле веб-мастеров Рима

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, но я не мог понять, как его использовать. Я создаю аналогичные SamplleModule, SampleModuleImpl и SampleModule Parser для поля webMaster, но я не знаю, как его использовать!

Это классы, которые я реализовал: 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 вы добавить его? Убедитесь, что вы устанавливаете его для элемента ModuleParser для версии RSS, которую вы пытаетесь проанализировать. –

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

И затем вы можете использовать его. Я использую заводной с рим для моего синтаксического анализа и делать такие вещи:

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

НТН