我正在尝试使用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 行而异.