我試圖使用javax.xml.stream.XMLStreamReader
解析(相當大)的XML文件。都能很好地形成的文件(xmllint驗證的),但我仍然得到以下異常:SAX:XML文檔結構必須在同一實體內開始和結束
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行,但在大約10K行後4M出現相對較小的文件(儘管問題發生後的行數趨於變化通過
把它們全部關閉您是否嘗試過使用更多最新的SAX解析器比提供的一個JDK? – artbristol
我發現了一些pull解析器非常麻煩。最好的一個是Woodstox。 –