1

我正在使用 Android 中的 SAX 解析器解析一个非常简单的 XML 模式。

一个示例文件是

<Lists>
<List name="foo">
<Note title="note 1" .../>
<Note title="note 2" .../>
</List>
<List name="bar">
<Note title="note 3" .../>
</List>
</Lists>

... 将更多的笔记数据表示为不重要的属性。

我使用 SAX 解析器来解析文档,并且只实现startElementHandlerBase 的 'endElement' 方法来处理 Note 和 List 节点。

但是,在某些情况下,文件可能非常大,需要一些时间来处理。我希望能够随时中止解析过程(即用户按下取消按钮)。

我想出的最好方法是在满足某些条件(即为boolean stopParsing真)时从我的 startElement 方法中抛出异常。

有一个更好的方法吗?

我一直使用 DOM 样式解析器,所以我并不完全了解 SAX 解析器。

最后一点,我在 Android 上运行它,所以我会让 Parser 在工作线程上运行以保持 UI 响应。如果您知道如何在解析器运行时安全地终止线程,那也可以回答我的问题。

4

1 回答 1

2

您可能想要查看XMLPullParser,因为这可以通过不调用 next 方法轻松执行。您可以更好地控制解析。

XmlPullParser xpp=getResources().getXml(R.xml.lists);
while (xpp.getEventType()!=XmlPullParser.END_DOCUMENT) {
    if (xpp.getEventType()==XmlPullParser.START_TAG) {
        if (xpp.getName().equals("list")) {
            items.add(xpp.getAttributeValue(0));
        }
    }

    xpp.next();
}
于 2010-04-05T18:58:29.517 回答