2017-04-02 73 views
1

所以我知道使用這個API時,服務器上生成的一些xml文件可能會錯誤地生成,或者沒有關閉某些標記或嚴重結構化。 現在我的代碼工作正常,但對於某些文件,一些XML文件中把這些錯誤,下面是錯誤的塊SAXParseException XML文檔結構必須在同一個實體中開始和結束

org.xml.sax.SAXParseException; systemId: file:///E:/ARCHIVED_LOGS/BACKUP_LOG_190317_0000/trace_file.xml; lineNumber: 201; columnNumber: 105; XML document structures must start and end within the same entity. 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.endEntity(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.endEntity(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.endEntity(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.peekChar(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 

那麼,有沒有一種方法來處理這些文件,而無需使用它們固定問題SAX解析器API?

我正在考慮逐行處理這些文件,但這是一個痛苦。

也有類似跳過DTD驗證的方式看到下面

SAXParserFactory factory = SAXParserFactory.newInstance(); 

    factory.setValidating(false);     
    factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 
    SAXParser saxParser = factory.newSAXParser(); 

謝謝:)

回答

0

不能使用符合標準的XML解析器來處理不符合要求的(非)XML文檔。

您可以使用不符合的解析器 - 例如HTML解析器 - 它可能提供SAX解析器API - 但是您是否可以找到解析器來接受正在拋出的非XML的特定味道是一個懸而未決的問題,因爲你沒有給我們任何這種非XML語言的規範。

+0

感謝您的回覆,我遇到的XML問題是它們是從以XML格式編寫日誌的實時服務器生成的;因此,這些文件在寫入過程中被採取或者在下載(複製)這些文件時發生重新啓動。結果其中一些結束了不正確的標籤關閉。 我正在考慮添加另一種處理方法(逐行讀取)以防發生寫入相同HashMap的異常 –

相關問題