2012-09-17 41 views
3

我有一個很大的XML文件,大於100MB,我想檢查這個文件的結構是否有效。如何檢查大xml文件的有效性?

我可以試着用DOMDocument加載這個文件;例如,我可以使用PHP XML解析器讀取它,它可以「讓您解析但不驗證XML文檔」。

有沒有辦法做到這一點,而無需將XML文件完全加載到內存中?

+0

您是否有XML模式來驗證您的文件?如果是這樣,[DOMDocument :: schemaValidate](http://www.php.net/manual/en/domdocument.schemavalidate.php)函數可能是你想要的。 –

+1

@JonahBishop我認爲他應該改爲使用XMLReader。 DOMDocument將嘗試首先將整個文件加載到內存中。 –

+0

有趣的一點,@MihaiTodor。我沒有意識到這一點。 –

回答

4

首先,你不會說你使用什麼樣的模式進行驗證:DTD,XSD,RelaxNG?

其次,你提到PHP,但你沒有說解決方案是否必須基於PHP。例如,你可以使用Java嗎?

一般來說,根據模式驗證XML文檔是一種流式操作,它不需要在內存中構建XML文檔的樹形表示。找到一個在你的環境中工作的流驗證器應該不難,但是我們需要知道環境是什麼(以及你使用的是什麼模式語言)。

0

想想你在說什麼。你想對不在內存中的數據進行操作。這根本沒有意義......如果你想從操作中引用它,它最終必須在內存中。

如果你不想一次加載數據到內存中,你可以採取分而治之的方法。如果該文件非常大,則可以在多個進程中運行map reduce作業,但這不會減少使用的內存量。

0

如果您只想檢查XML結構是否有效,則可以使用PHP的XML解析器。它不會根據DTD驗證文檔,這就意味着它不會驗證。

所有這些error codes都可以在解析XML結構無效的情況下返回。