请告诉我,是否有可能打破解析过程?即退出此循环未到达文档的末尾和相应的事件“endDocument”?
答案 0 :(得分:11)
在处理程序中抛出异常并在开始解析的代码块中捕获它:
try {
...
xmlReader.parse();
} catch (SAXException e) {
if (e.Cause instanceof BreakParsingException) {
// we have broken the parsing process
....
}
}
在你的DocumentHandler中:
public void startElement(String namespaceURI,
String localName,
String qName,
Attributes atts)
throws SAXException {
// ...
throw new SAXException(new BreakParsingException());
}
答案 1 :(得分:4)
简单的解决方案是使用StAX解析 - 而不是SAX。虽然SAX已推送解析 - 事件由解析器发送到处理程序,但StAX是拉解析,事件通过XMLEventReader提供给我们,它可以类似于迭代器使用。因此,实现条件中断更容易打破解析。
答案 2 :(得分:2)
您必须抛出SAXException。为了将它与常规错误区分开来,我将使用我自己的Exception类
对其进行子类化