Android 将XML SAXParser限制为特定数量或项目

Android 将XML SAXParser限制为特定数量或项目,android,xml,xml-parsing,sax,saxparser,Android,Xml,Xml Parsing,Sax,Saxparser,我正在解析Android应用程序的rss XML新闻提要。我使用的是SAXParser,一切都正常工作,但我希望能够限制我检索的故事数量,我找不到这样做的方法。例如,假设其中一个新闻源有45个故事,我只想要最新的10个。现在,我只是把它们都抓取到一个ArrayList中,只显示我想要的,我相信这是最有效的方法 如果需要,我可以提供解析代码 感谢所有看这个的人 我不确定是否有办法阻止sax解析器解析。但是,您可以使用XMLPullParser XmlPullParserFactory factor

我正在解析Android应用程序的rss XML新闻提要。我使用的是
SAXParser
,一切都正常工作,但我希望能够限制我检索的故事数量,我找不到这样做的方法。例如,假设其中一个新闻源有45个故事,我只想要最新的10个。现在,我只是把它们都抓取到一个
ArrayList
中,只显示我想要的,我相信这是最有效的方法

如果需要,我可以提供解析代码


感谢所有看这个的人

我不确定是否有办法阻止sax解析器解析。但是,您可以使用
XMLPullParser

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(yourXML);

int eventType = xpp.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT && list.size() <= MAX_SIZE) {

    if (eventType == XmlPullParser.START_TAG) {
        //do something
    } else if (eventType == XmlPullParser.END_TAG) {
        //do something
    } else if (eventType == XmlPullParser.TEXT) {
        //do something
    }
    eventType = xpp.next();
}
在解析时:

try{
saxParser.parse(yourXML);
}catch(SAXException e){
  if(e.getMessage().equals("end"){
    // document has ended
  }
}

通过让任何回调方法(例如startElement)抛出SAXException,可以阻止SAX解析器解析更多的输入


您需要使此异常可识别(例如,通过使用特殊的消息文本,或通过使用SAXException的子类),以便当您最初的parse()调用返回异常时,您可以将其与解析器失败的其他原因区分开来。

当您向arraylist添加对象时,只需检查其大小,如果它有10个元素,则不向其添加。我考虑过这一点,但这意味着整个XML仍将被解析。我宁愿在
ArrayList
达到所需大小后停止解析。您可以在达到所需的元素数后(或直到没有更多的元素需要处理,以先到者为准)从解析操作中中断/返回?如何@MH?如果我在将对象添加到列表的
startElement()
方法中添加一个计数器,那么简单的
break
是否有效?很抱歉,该注释有点不准确:break或return不起作用。按照建议,您必须抛出一个异常。快速搜索SO会得到相同的答案。不是最漂亮的,但是功能性的,我想。。。请看下面的例子,寻找一些具体的指针。你有一个如何做到这一点的例子吗?恐怕不是一个简单的例子。在中有一个通用技术的示例,但它没有直接使用SAX接口,因此事件和异常略有不同。(本例是在文件开头读取xml样式表处理指令,然后在遇到第一个元素节点时中止解析。)我只是以45为例。如果有几百个呢?它不再那么快了。我知道PullParser,但需要更多地了解SAX。
try{
saxParser.parse(yourXML);
}catch(SAXException e){
  if(e.getMessage().equals("end"){
    // document has ended
  }
}