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

3

我有一个超过100MB的大型XML文件,我想检查此文件的结构是否有效。

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

是否有一种方法可以在不完全加载XML文件到内存中的情况下完成此操作?


你是否有一个XML模式来验证你的文件?如果是这样,DOMDocument :: schemaValidate函数可能是你想要的。 - Jonah Bishop
1
@JonahBishop 我认为他应该选择XMLReader。DOMDocument会先尝试将整个文件加载到内存中。 - Mihai Todor
有趣的观点,@MihaiTodor。我之前不知道这个。 - Jonah Bishop
4个回答

4
首先,您没有说明正在使用哪种模式进行验证:DTD、XSD还是RelaxNG?
其次,您提到了PHP,但没有说明解决方案是否必须基于PHP。例如,您可以使用Java吗?
一般来说,针对模式验证XML文档是一种可流式化的操作,它不需要在内存中构建XML文档的树状表示。找到可以在您的环境中工作的流式验证程序应该不难,但我们需要知道环境是什么(以及您正在使用哪种模式语言)。

3

0

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

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


0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接