如果在CDATA部分中指定了URL,则罗马API不会解析图像URL。 例如,http://www.espn.com/espn/rss/espnu/news此供稿具有
<image>
<![CDATA[
URL of the image
]]>
</image>
在SyndFeedInput生成的SyndFeed中,我已经检查了外部标记,附件,DCModules。
CDATA中也提供了其他元素的值,例如Description和Title,Rome API能够解析这些值。
代码段
XmlReader xmlReader = null;
try {
xmlReader = new XmlReader(new URL("http://www.espn.com/espn/rss/espnu/news"));
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(xmlReader);
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:0)
我详细研究了API。 API提供了用于覆盖解析的插件 https://rometools.github.io/rome/RssAndAtOMUtilitiEsROMEV0.5AndAboveTutorialsAndArticles/RssAndAtOMUtilitiEsROMEPluginsMechanism.html
我写了一个扩展RSS20Parser的类,该类实现了WireFeedParser并覆盖了parseItem方法
@Override
public Item parseItem(Element rssRoot, Element eItem, Locale locale) {
Item item = super.parseItem(rssRoot, eItem, locale);
Element imageElement = eItem.getChild("image", getRSSNamespace());
if (imageElement != null) {
String imageUrl = imageElement.getText();
Element urlElement = imageElement.getChild("url");
if(urlElement != null)
{
imageUrl = urlElement.getText();
}
Enclosure e = new Enclosure();
e.setType("image");
e.setUrl(imageUrl);
item.getEnclosures().add(e);
}
return item;
}
现在在SyndFeed中,访问附件列表,您将能够找到图像URL
List<SyndEntry> entries = feed.getEntries();
for (SyndEntry entry : entries) {
...
...
List<SyndEnclosure> enclosures = entry.getEnclosures();
if(enclosures!=null) {
for(SyndEnclosure enclosure : enclosures) {
if(enclosure.getType()!=null && enclosure.getType().equals("image")){
System.out.println("image URL : "+enclosure.getUrl());
}
}
}
}
并创建rome.properties文件,该文件可通过以下条目在类路径中访问
WireFeedParser.classes=your.package.name.CustomRomeRssParser