2008-09-02 39 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