【问题标题】:Is there a way to Stop or Quit parsing from within a DefaultHandler?有没有办法从 DefaultHandler 中停止或退出解析?
【发布时间】:2011-07-19 21:09:29
【问题描述】:

有没有办法在 SAXParser 或 XMLReader 上调用 quit() 函数?

XML 文档每天左右才更新一次,我只想在元素发生变化时读取完整的文档。

在我的默认处理程序中:

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {

    if (localName.equals("pubDate")) {
        if (currentValue.equals(mPreviousPubDateValue)) {
                //exit parsing
        }
    } else {
        //keep on parsing
    }


}

XML 文档相当大,我希望能够退出它。 DefaultHandler 没有任何用于停止解析的内置函数。我也可以传入对 XMLReader 的引用,但它也没有停止自身的方法。

谢谢!

【问题讨论】:

  • 加一个break怎么样;里面的测试日期?您中断操作并显示没有新数据的内容。

标签: java android xmlreader


【解决方案1】:

你可以抛出SAXException来停止解析

您可以使用它的子类来确保由于您的决定而不是随机解析异常而导致解析失败

【讨论】:

    【解决方案2】:

    (请忽略以下内容,当然,您可以通过在 ratchetfreaks 答案中抛出 SAXException 来做到这一点)

    有趣的问题--

    我能想到一种方法——

    如果您的解析器正在从 InputStream 中读取,请创建您自己的类,该类是另一个 InputStream 的包装器,它只是传递调用,直到您在包装器上设置标志。设置标志后,包装器向其调用者指示 EOF。然后,在默认处理程序中包含对此包装器的引用,并将包装的流传递给解析器。当您的处理程序确定它不再需要读取时,它会在您的包装器上设置标志,这会将 EOF 发送到解析器,从而停止解析(并可能引发异常......)

    这似乎是一个可行的,虽然丑陋的解决方案。也许有人有别的东西?

    【讨论】:

    • 当然,您可以包装 XMLReader 而不是 InputStream。
    • 我喜欢你的想法,但抛出异常要容易得多。 :)
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多