Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查大xml文件的有效性?_Php_Xml_Xml Parsing_Xml Validation - Fatal编程技术网

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

Php 如何检查大xml文件的有效性?,php,xml,xml-parsing,xml-validation,Php,Xml,Xml Parsing,Xml Validation,我有一个大于100mb的大XML文件,我想检查这个文件的结构是否有效 我可以尝试使用DOMDocument加载此文件;例如,我可以使用PHP XML解析器阅读它,它“允许您解析但不验证XML文档” 有没有办法在不将XML文件完全加载到内存的情况下执行此操作?想想你在说什么。您希望对不在内存中的数据执行操作。这根本没有道理。。。如果要从操作中引用它,它最终必须在内存中 如果您不想同时将数据加载到内存中,可以采用分而治之的方法。如果文件非常大,您可以在多个进程中运行map reduce作业,但这不会

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

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


有没有办法在不将XML文件完全加载到内存的情况下执行此操作?

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


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

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


如果在解析XML结构时发现该结构无效,则可以返回所有这些内容。

我认为您需要查看该类。更具体地说,
.

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

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


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

您是否有XML模式来验证您的文件?如果是这样的话,这个函数可能就是您想要的。@JonahBishop我认为他应该选择XMLReader。DOMDocument将首先尝试将整个文件加载到内存中。有趣的是,@mihaitor。我不知道。