我正在尝试使用javax.xml.stream.XMLStreamReader
. 这些文件格式正确(使用 xmllint 验证),但我仍然收到以下异常:
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[12418,95]
Message: XML document structures must start and end within the same entity.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:592)
这是我的代码的简化:
while(parser.hasNext()){
parser.next();
if (parser.getEventType() == XMLStreamReader.START_ELEMENT){
if (parser.getLocalName() == "s") {
// do stuff
}
}
if (parser.getEventType() == XMLStreamReader.END_ELEMENT){
if (parser.getLocalName() == "s") {
// do more stuff
}
}
if (parser.getEventType() == XMLStreamReader.CHARACTERS){
if (inSentenceElement) {
// process text
parser.getText()...
}
}
}
我已经检查了错误消息中给出的 XML 中的行/列,没有什么让我觉得不寻常。我一直认为文件的大小可能是一个问题,并且它们会被截断,以便在关闭根元素之前读取 EOF。这可行吗?如果可行,我该如何避免呢?
编辑:bz2 压缩文件的大小高达 1.5G,最多 7M 行,但在 4M 的相对较小的文件在大约 10K 行后崩溃(尽管出现问题的行数往往会因 3K 行而异.