Java Sax 解析器 - 在 EndElementListener 中停止处理

标签 java android xml sax saxparser

我正在使用 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/

相关文章:

java - 从数据库和数组列表中删除行

java - 将一个 int 乘以 30、31、32 - 这些真的被编译器优化了吗? (有效的java这么说)

java - 设置 EditText.setText() 会导致应用程序崩溃

android - 可绘制矢量大小调整不正确

iphone - 来自数组的 UIGridView

PHP XML (DOM) 扩展 : installed but not listed in phpinfo in centos

android - 在xml中设置样式

java - 如何在java中做一个数字键盘

java - 如何从短信中获取PDU

java - 如何为多个 JButton 运行代码?