我有一个大于100mb的大型XML文件,我想检查这个文件的结构是否有效。
我可以尝试使用DOMDocument
加载此文件;例如,我可以使用PHP XML解析器阅读它,它允许您解析但不验证XML文档"。
如果没有将XML文件完全加载到内存中,有没有办法做到这一点?
答案 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。