只获得SAXParser中的前N个结果

时间:2013-12-05 11:22:05

标签: android saxparser

我已经使用XML实现了我的SAXParser解析器,但我找不到如何设置它以便解析在一定数量的元素之后立即停止。

我想在我的Handler中声明一个int属性来计算结果,如果count>N方法只返回,但这样就完全读取了xml文档。

修改

通过braj的解决方案,我解决了这个问题:

Handler的实施中:

@Override
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException,MySAXTerminatorException {
     if (count > cap)
     throw new MySAXTerminatorException();

然后当我们调用解析器时:

try {
        sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();
        xr.setContentHandler((ContentHandler) handler);
        xr.parse(new InputSource(new StringReader(xml)));
        output.addAll(handler.getParsedData());
        return output;
    } 
    catch(MySAXTerminatorException e){
        output.addAll(handler.getParsedData());
        return output;
    }

这样一来,当你达到上限时,它会中断解析。

1 个答案:

答案 0 :(得分:1)

不确定,但希望有所帮助。

为异常创建一个类。

public class MySAXTerminatorException extends SAXException {
...
}

我猜在SAX解析器中有一个名为startElement(...)的重写方法。 保留一个全局布尔变量,在需要时将其设置为true,并在startElement方法的第一行中继续检查此值。

由于每次控制都必须使用此方法,因此只要该布尔值变为true,执行就会以异常终止。

像这样的东西

if (someConditionOrOther) {
    throw new MySAXTerminatorException();
}
相关问题