Java的。 Sax解析器。如何手动中断解析?

时间:2010-06-03 08:27:38

标签: java sax

请告诉我,是否有可能打破解析过程?即退出此循环未到达文档的末尾和相应的事件“endDocument”?

3 个答案:

答案 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类

对其进行子类化