2017-04-02 90 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的异常 –

相关问题