java - SAXParseException XML 文档结构必须在同一实体内开始和结束

标签 java xml saxparser validating

所以我知道使用这个API,我在服务器上生成的一些xml文件可能会错误地生成,或者没有关闭一些标签,或者结构很糟糕。 现在我的代码工作正常,但对于某些文件,其中一些 xml 文件会抛出这些错误,下面是错误 block

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();

谢谢:)

最佳答案

您不能使用符合规范的 XML 解析器来处理不符合规范的(非)XML 文档。

您可以使用不符合标准的解析器 - 例如 HTML 解析器 - 并且它可能提供 SAX 解析器 API - 但您是否可以找到一个接受向您抛出的非 XML 特定风格的解析器是一个悬而未决的问题,因为您没有为我们提供这种非 XML 语言的任何类型的规范。

关于java - SAXParseException XML 文档结构必须在同一实体内开始和结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43168950/

相关文章:

java - Strava API 在初始身份验证时返回 404

c# - 如何使用类名作为根元素序列化 C# 类

xml - 防止 XSL 1.0 中的 2^n - 1 条件

Xml 文件中的 Android Xml Sax 解析器错误

java - Webflux : pass files and DTO into single request

java - 将 Java CompletableFuture 转换为 TwitterFuture(没有任何中间 Future)

java - 防止父类Java的序列化

java - Jaxb 可以编码没有根元素的子元素吗?

java - 如何在 xsd 中添加空白验证

java - XML 使用 java saxparser 从不同的 xml 文件中读取一个特殊元素