我正在使用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响应。如果你知道如何在解析器运行时安全地杀死线程,这也会回答我的问题。
答案 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();
}