如何解决对不同的RSS供稿使用自定义的特定解析器
我正在使用ROME库读取Java的RSS feed。
在这种情况下,我有多个RSS feed(均具有2.0版),并且每个feed具有其自己的结构和自定义标签。我在官方文档中读到,我们在阅读提要时可以指定a custom parser。
我已经实现了自定义解析器,并在 rome.properties 中指定了该解析器,并且效果很好。
下一步,我的目标是为我正在阅读的每个供稿指定一个自定义解析器,以避免使用又长又复杂的解析器。
但是在文档中看来,属性文件中定义的自定义解析器更适合用于不同的RSS版本,而不是用于不同的XML结构。
此属性中定义的所有类都必须实现com.rometools.rome.io.WireFeedParser接口。解析器实例必须是线程安全的。 getType()方法的返回值用作主键。如果有多个解析器返回相同的类型,则以后者为准。
此处的getType()
方法指出了 rss版本
我需要知道是否有一种方法(或没有方法)用ROME为不同的提要指定不同的自定义解析器。
解决方法
通过为我的每个自定义解析器定义不同的提要类型并覆盖isMyType
来进行这项工作,以便它检查RSS提要的源链接或标题。
public class FooParser extends RSS20Parser {
public FooParser() { super("foo_rss_2.0"); }
@Override
public boolean isMyType(Document document) {
return super.isMyType(document) && isFoo(document);
}
}
然后,您可以为该Feed类型定义一个Converter。
public class FooConverter extends ConverterForRSS20 {
public FooConverter() { super("foo_rss_2.0"); }
}
您都需要在rome.properties
WireFeedParser.classes=FooParser
Converter.classes=FooConverter
我还以某种方式重新排序了rome
加载插件的方式。我发现可以通过将RSS20Parser
重新添加到“额外插件”文件中来做到这一点。
WireFeedParser.classes=FooParser \
com.rometools.rome.io.impl.RSS20Parser
Converter.classes=FooConverter \
com.rometools.rome.feed.synd.impl.ConverterForRSS20
如果不这样做,RSS20Parser
将用于所有RSS 2.0 feed。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。