我正在使用 android 的 SAX 解析器,我希望在读取 N 个元素后停止处理。一些提要非常大,可能需要一段时间才能完成。如果某个元素的 EndElementListener 中满足某些条件,我该如何停止解析?这是我当前的听众
chanItem.setEndElementListener(new EndElementListener() {
public void end() {
_items.add(_item);
if (++_currentItem == _maxElements) {
//BREAK OUT HERE
}
}
});
我试过在 end() 中抛出异常,但 EndElementListener 不允许抛出任何异常。 指导将不胜感激。
最佳答案
定义一个名为“SaxBreakOutException”的新未检查异常:
class SaxBreakOutException extends RuntimeException {
}
将此放入您的监听器中:
chanItem.setEndElementListener(new EndElementListener() {
public void end() {
_items.add(_item);
if (++_currentItem == _maxElements) {
throw new SaxBreakOutException();
}
}
});
并在调用 XmLReader.parse() 的代码中捕获它:
reader.setContentHandler(handler);
try {
reader.parse(new InputSource(new StringReader(xml)));
} catch (SaxBreakOutException allDone) {
}
或者,切换到 Android 的 XmlPullParser这不需要异常提前爆发。
关于Java Sax 解析器 - 在 EndElementListener 中停止处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8331972/