3

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

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

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

4

4 回答 4

4

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

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

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

于 2012-09-17T21:39:54.643 回答
3

我认为您需要查看XMLReader类。更具体地说, XMLReader::setSchema

于 2012-09-17T17:16:39.603 回答
0

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

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

于 2012-09-17T17:13:26.530 回答
0

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

如果在解析 XML 结构时发现其无效,则可以返回所有这些错误代码。

于 2012-09-17T17:15:57.497 回答