我試圖找到一種方法來驗證對XSD的大型XML文件。我看到...best way to validate an XML...這個問題,但所有答案都指向使用Xerces庫進行驗證。唯一的問題是,當我使用該庫來驗證180 MB文件時,我得到一個OutOfMemoryException。驗證巨大的XML文件
是否有任何其他工具,庫,用於驗證大於正常XML文件的策略?
編輯:SAX解決方案適用於java驗證,但libxml工具的其他兩個建議也非常有用,以及在java之外驗證。
我試圖找到一種方法來驗證對XSD的大型XML文件。我看到...best way to validate an XML...這個問題,但所有答案都指向使用Xerces庫進行驗證。唯一的問題是,當我使用該庫來驗證180 MB文件時,我得到一個OutOfMemoryException。驗證巨大的XML文件
是否有任何其他工具,庫,用於驗證大於正常XML文件的策略?
編輯:SAX解決方案適用於java驗證,但libxml工具的其他兩個建議也非常有用,以及在java之外驗證。
不使用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")));
我個人喜歡使用XMLStarlet,它有一個命令行界面,並在流上工作。它是一套基於Libxml2構建的工具。
如前所述,SAX和libXML將有所幫助。您也可以使用-Xmx選項嘗試增加JVM的最大堆大小。例如。將最大堆大小設置爲512MB:java -Xmx512m com.foo.MyClass
對於易於使用的Windows工具,您可以使用[XML ValidatorBuddy](http://www.xml-tools.com/ValidatorBuddy.htm),它使用Xerces SAX解析器在內部驗證大文件。 – Clemens 2011-09-02 06:16:35