2014-09-28 59 views
0

我正在解析Android应用程序的rss XML新闻Feed。我正在使用SAXParser,并且所有工作都是按照它应该的方式进行的,但我希望能够限制我检索的故事数量,并且我无法找到这样做的方法。例如,假设有一个新闻源中有45个故事,我只想要最新的10个。现在,我只是将它们全部抓到一个ArrayList,并且只显示我想要的,最肯定是最我相信这样做的有效方法。将XML SAXParser限制为某个数字或项目

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

感谢任何人看着这个!

+0

当您将对象添加到arraylist时,只需检查其大小,如果它包含10个元素,则不要添加它。 – 2014-09-28 06:24:30

+0

我想过,但这意味着整个XML仍然会被解析。一旦ArrayList达到所需的大小,我宁愿停止解析。 – WeVie 2014-09-28 06:26:08

+0

您可以在达到所需数量的元素后(或直到没有更多要处理的时间,以先到者为准)在分析操作中分解/返回? – 2014-09-28 06:37:51

回答

0

我不确定是否有办法阻止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(); 
} 

您可以通过搜索XMLPullParser教程找到很多示例。

注意:我认为如果你只有45个项目解析速度非常快,你可以让萨克斯继续解析。

更新:我觉得它是什么Michael说:

@Override 
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 

    if(size == MAX_SIZE){ 
     throw new SAXException("end"); 
    } 
    //... 
} 

而且当你正在解析:

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

我刚刚以45为例。如果有几百呢?它不再那么快了。我知道PullParser,但需要了解有关SAX的更多信息。 – WeVie 2014-09-28 14:16:51

+0

@WeVie查看编辑答案。 – 2014-09-28 18:50:23

2

您可以通过具有任何解析任何更多的输入停止SAX解析器你的回调方法(例如startElement)抛出一个SAXException。

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

+0

你有一个如何做到这一点的例子吗? – WeVie 2014-09-28 14:12:01

+0

恐怕不是一个简单的问题。 http://grepcode.com/file/repo1.maven.org/maven2/net.sourceforge.saxon/saxon/9.1.0.8/net/sf/saxon/event/PIGrabber.java提供了一般技术示例,但它不直接使用SAX接口,所以事件和例外情况稍有不同。 (这个例子是在文件开始时读取xml-stylesheet处理指令,然后在遇到第一个元素节点时中止解析。) – 2014-09-28 20:39:10

相关问题