【发布时间】:2010-08-18 03:01:15
【问题描述】:
我正在使用 Android SAX 解析器在一个相当大 (6MB) 的 XML 文件中搜索条目。我基本上使用清单 8 here 中所示代码的派生代码。我的问题是找到匹配项后如何停止解析?显示的代码继续解析文件末尾,但我想在那之前停止。这是可能的还是我需要使用 SAX 以外的东西(例如 XmlPullParser?)
【问题讨论】:
我正在使用 Android SAX 解析器在一个相当大 (6MB) 的 XML 文件中搜索条目。我基本上使用清单 8 here 中所示代码的派生代码。我的问题是找到匹配项后如何停止解析?显示的代码继续解析文件末尾,但我想在那之前停止。这是可能的还是我需要使用 SAX 以外的东西(例如 XmlPullParser?)
【问题讨论】:
生成一个 ArithmeticException 并捕获它!
if (condition) { int a=1; a/=0; }
...
try {
Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, root.getContentHandler());
}
catch (ArithmeticException e) {
return true;
}
这很糟糕,但它确实有效......
【讨论】:
那么 DiskCrasher, 每个 Sax 解析器一般都会工作到最后,但是如果你还想在它工作的过程中退出它,你可以随时检查条件并使用 return 语句。
但是更好的选择性解析方法是使用 XML PullParser,因为这个解析器通常会在运行中运行并在不加载整个文件的情况下为您提供数据。这样您就可以随时检查条件并退出循环,甚至无需使用大内存块...
希望对你有所帮助!!!
【讨论】:
您可以在获得匹配项时抛出异常。异常可以捕获匹配信息并将传播到原始 parse() 调用者。捕获异常并测试它是基于获取匹配还是真正的解析错误并进行相应处理。
【讨论】: