2008-09-02 69 views
28

我試圖找到一種方法來驗證對XSD的大型XML文件。我看到...best way to validate an XML...這個問題,但所有答案都指向使用Xerces庫進行驗證。唯一的問題是,當我使用該庫來驗證180 MB文件時,我得到一個OutOfMemoryException。驗證巨大的XML文件

是否有任何其他工具,庫,用於驗證大於正常XML文件的策略?

編輯:SAX解決方案適用於java驗證,但libxml工具的其他兩個建議也非常有用,以及在java之外驗證。

+1

對於易於使用的Windows工具,您可以使用[XML ValidatorBuddy](http://www.xml-tools.com/ValidatorBuddy.htm),它使用Xerces SAX解析器在內部驗證大文件。 – Clemens 2011-09-02 06:16:35

回答

30

不使用DOMParser,而是使用SAXParser。這從輸入流或讀取器讀取,因此您可以將XML保留在磁盤上,而不是將其全部加載到內存中。

SAXParserFactory factory = SAXParserFactory.newInstance(); 
factory.setValidating(true); 
factory.setNamespaceAware(true); 

SAXParser parser = factory.newSAXParser(); 

XMLReader reader = parser.getXMLReader(); 
reader.setErrorHandler(new SimpleErrorHandler()); 
reader.parse(new InputSource(new FileReader ("document.xml"))); 
8
使用

libxml,其執行驗證具有流傳輸模式。

+0

看起來像這樣也可以在libxml2下工作,對嗎? – oob 2011-10-07 13:58:37

2

我個人喜歡使用XMLStarlet,它有一個命令行界面,並在流上工作。它是一套基於Libxml2構建的工具。

1

如前所述,SAX和libXML將有所幫助。您也可以使用-Xmx選項嘗試增加JVM的最大堆大小。例如。將最大堆大小設置爲512MB:java -Xmx512m com.foo.MyClass