有没有办法在DefaultHandler中停止或退出解析?

时间:2011-07-19 21:09:30

标签: java android xmlreader

有没有办法在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的引用,但它也没有停止自身的方法。

谢谢!

2 个答案:

答案 0 :(得分:4)

你可以抛出SAXException来停止解析

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

答案 1 :(得分:1)

(请忽略以下,当然你通过抛出SAXException来做到这一点,如同在ratchetfreaks回答)

有趣的问题 -

我可以想到一种方式 -

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

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