如何下载rss的部分?
我需要一些方法来实现这一目标。我能理解上次修改的"页面#34;防止下载,但我想知道我是否可以只在RSS源中下载新项目?
答案 0 :(得分:1)
如果你想要"只是一个部分" RSS提要(或扩展名,任何XML文档)您需要一个拉解析器。拉解析器是一种解析器,它允许你决定要解析多少XML。例如,在100个项目的RSS源中,您可能希望在前25个项目之后停止解析。
XmlPullParser
是您需要了解的内容。
现在,回到您想要仅下载新Feed的情况。是的你可以。方法如下:
.xml
文件)。 为了完整起见,还有一个推送解析器。推送解析器是一种解析器,一旦启动,就会一直解析XML,直到它到达文件末尾或生成一些异常。 SAXParser
是推送解析器。
答案 1 :(得分:1)
使用XmlPullParser解析您的内容。一旦你找到pubDate比你正在寻找的项目更早的项目,就要突破循环。这是我编写的一些旧代码。
我最终发现,下载我希望解析并在本地存储它们的所有RSS源比使用一个接一个地解析它们并解析它们更有效。
public static List<Content> parseNewEpisodesFromXml(InputStream stream,
long id, long oldPubDate) throws XmlPullParserException,
IOException, ParseException {
List<Content> content = new ArrayList<Content>();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(stream, "UTF-8");
int eventType = xpp.getEventType();
SimpleDateFormat pubDateFormatter = new SimpleDateFormat(
"EEE, dd MMM yyy HH:mm:ss zzzz");
Content content = new Content()
boolean oldContentFound = false;
while (eventType != XmlPullParser.END_DOCUMENT || !oldContentFound) {
name = xpp.getName();
switch (eventType) {
case (XmlPullParser.END_TAG):
// end stuff here
brea;
case (XmlPullParser.START_TAG):
if {
// do your thing here...
} else if (name.matches("pubDate") {
content = xpp.nextText();
Date pubDate = pubDateFormatter.parse(content);
if (oldPubDate == pubDate.getTime()) {
oldContentFound = true;
break;
}
}
break;
}
eventType = xpp.next();
}
}