【发布时间】:2009-05-22 13:08:08
【问题描述】:
我对使用 XML 比较陌生,并且正在使用 javax.xml.parsers.SAXParser 处理一些相当大的文档。
问题是:我需要的信息位于 XML 文件的顶部附近,我不需要 来解析整个文档。 -- 识别出相关信息后,停止解析文件的“最佳”方法是什么?
(目前我能想到的唯一方法就是抛出异常。)
【问题讨论】:
我对使用 XML 比较陌生,并且正在使用 javax.xml.parsers.SAXParser 处理一些相当大的文档。
问题是:我需要的信息位于 XML 文件的顶部附近,我不需要 来解析整个文档。 -- 识别出相关信息后,停止解析文件的“最佳”方法是什么?
(目前我能想到的唯一方法就是抛出异常。)
【问题讨论】:
抛出异常是阻止它的唯一方法。示例见this IBM XML tip。
您可能应该实现自己的异常来表示打算停止进一步处理。这样,您将能够区分有意停止处理和无意停止(遇到一些意外情况等时)
【讨论】:
您可以使用 StAX。它实际上随时停止解析过程而不会抛出任何异常。
退房:
http://www.xml.com/pub/a/2003/09/17/stax.html
http://jcp.org/en/jsr/detail?id=173
【讨论】:
似乎抛出异常是解决这个问题的最好方法,就像outlined by Tom:
public class MySAXTerminatorException extends SAXException {
...
}
public void startElement (String namespaceUri, String localName,
String qualifiedName, Attributes attributes)
throws SAXException {
if (someConditionOrOther) {
throw new MySAXTerminatorException();
}
...
}
【讨论】: