【问题标题】:Exiting from Xml.parse when match is found找到匹配项时退出 Xml.parse
【发布时间】:2010-08-18 03:01:15
【问题描述】:

我正在使用 Android SAX 解析器在一个相当大 (6MB) 的 XML 文件中搜索条目。我基本上使用清单 8 here 中所示代码的派生代码。我的问题是找到匹配项后如何停止解析?显示的代码继续解析文件末尾,但我想在那之前停止。这是可能的还是我需要使用 SAX 以外的东西(例如 XmlPullParser?)

【问题讨论】:

    标签: android sax


    【解决方案1】:

    生成一个 ArithmeticException 并捕获它! if (condition) { int a=1; a/=0; } ...

    try {
        Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, root.getContentHandler());
    } 
    catch (ArithmeticException e) {
        return true;
    }
    

    这很糟糕,但它确实有效......

    【讨论】:

    • 只抛出一个未经检查的异常,如 NullPointer 或算术
    【解决方案2】:

    那么 DiskCrasher, 每个 Sax 解析器一般都会工作到最后,但是如果你还想在它工作的过程中退出它,你可以随时检查条件并使用 return 语句。

    但是更好的选择性解析方法是使用 XML PullParser,因为这个解析器通常会在运行中运行并在不加载整个文件的情况下为您提供数据。这样您就可以随时检查条件并退出循环,甚至无需使用大内存块...

    希望对你有所帮助!!!

    【讨论】:

    • 谢谢,但我无法从匿名内部类发出返回语句。
    【解决方案3】:

    您可以在获得匹配项时抛出异常。异常可以捕获匹配信息并将传播到原始 parse() 调用者。捕获异常并测试它是基于获取匹配还是真正的解析错误并进行相应处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 2017-11-25
      • 2019-12-01
      • 1970-01-01
      相关资源
      最近更新 更多