中止SAX解析中间文档?

时间:2010-04-05 18:52:15

标签: android multithreading sax saxparser

我正在使用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解析器来解析文档,并且只实现HandlerBase的startElement和'endElement'方法来处理Note和List节点。

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

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

有更好的方法吗?

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

最后一点说明,我在Android上运行它,因此我将在工作线程上运行Parser以保持UI响应。如果你知道如何在解析器运行时安全地杀死线程,这也会回答我的问题。

1 个答案:

答案 0 :(得分:2)

您可能希望查看XMLPullParser,因为只需不调用下一个方法就可以轻松执行此操作。您可以更好地控制解析。

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();
}