如何检查大xml文件的有效性?

时间:2012-09-17 17:00:47

标签: php xml xml-parsing xml-validation

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

我可以尝试使用DOMDocument加载此文件;例如,我可以使用PHP XML解析器阅读它,它允许您解析但不验证XML文档"。

如果没有将XML文件完全加载到内存中,有没有办法做到这一点?

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

如果你想做的就是检查XML结构是否有效,你可以使用PHP的XML Parser。它不会针对DTD验证文档,这意味着它不会验证。

如果在解析XML结构时发现XML结构无效,则可以返回所有这些error codes