有没有办法在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的引用,但它也没有停止自身的方法。
谢谢!
答案 0 :(得分:4)
你可以抛出SAXException
来停止解析
您可以使用它的子类来确保解析因您的决定而失败,而不是随机解析异常
答案 1 :(得分:1)
(请忽略以下,当然你通过抛出SAXException来做到这一点,如同在ratchetfreaks回答)
有趣的问题 -
我可以想到一种方式 -
如果您的解析器正在从InputStream读取,请创建您自己的类,该类是另一个传递调用的InputStream的包装,直到您在包装器上设置标志。设置了标志后,包装器会向其调用者显示EOF。然后,在默认处理程序中包含对此包装器的引用,并将包装的流传递给解析器。当你的处理程序确定它不再需要读取时,它会在你的包装器上设置一个标志,它会向解析器发送一个EOF,它会停止解析(并抛出异常,可能......)
这似乎是一个可行的,虽然丑陋的解决方案。也许有人还有别的东西?