【问题标题】:How to check validity of big xml file?如何检查大xml文件的有效性?
【发布时间】:2012-09-09 22:43:39
【问题描述】:

我有一个很大的 XML 文件,大于 100mb,我想检查这个文件的结构是否有效。

我可以尝试使用DOMDocument 加载此文件;例如,我可以使用 PHP XML 解析器来读取它,它“让您解析但不验证 XML 文档”。

有没有办法在不将 XML 文件完全加载到内存的情况下做到这一点?

【问题讨论】:

  • 您是否有 XML 架构来验证您​​的文件?如果是这样,DOMDocument::schemaValidate 函数可能就是您想要的。
  • @JonahBishop 我认为他应该改用 XMLReader。 DOMDocument 将首先尝试将整个文件加载到内存中。
  • 有趣的一点,@MihaiTodor。我没有意识到这一点。

标签: php xml xml-parsing xml-validation


【解决方案1】:

首先,您没有说明您使用哪种模式进行验证:DTD、XSD、RelaxNG?

其次你提到了PHP,但你没有说解决方案是否必须基于PHP。例如,您可以使用 Java 吗?

一般来说,根据模式验证 XML 文档是一种可流式操作,它不需要在内存中构建 XML 文档的树表示。找到适用于您的环境的流式验证器应该不难,但我们需要知道环境是什么(以及您使用的架构语言)。

【讨论】:

    【解决方案2】:

    我认为您需要查看 XMLReader 类。进一步来说, XMLReader::setSchema.

    【讨论】:

      【解决方案3】:

      想想你在说什么。您想对不在内存中的数据进行操作。这根本没有意义......如果你想从操作中引用它,它最终必须在内存中。

      如果您不想一次将所有数据加载到内存中,您可以采用分而治之的方法。如果文件非常大,您可以在多个进程中运行 map reduce 作业,但这不会减少使用的内存量。

      【讨论】:

        【解决方案4】:

        如果您只想检查 XML 结构是否有效,您可以使用 PHP 的 XML Parser。它不会根据 DTD 验证文档,这就是它不会验证的意思。

        所有这些error codes都可以在解析时发现XML结构无效的情况下返回。

        【讨论】:

          猜你喜欢
          • 2013-01-19
          • 2011-09-16
          • 1970-01-01
          • 2015-05-29
          • 1970-01-01
          • 2012-09-03
          • 1970-01-01
          • 2012-02-05
          • 2021-12-10
          相关资源
          最近更新 更多