验证HUGE XML文件

时间:2008-09-02 21:04:39

标签: java xml validation xsd

我正在尝试找到一种方法来针对XSD验证大型XML文件。我看到了问题...best way to validate an XML...,但答案都指向使用Xerces库进行验证。唯一的问题是,当我使用该库来验证180 MB文件时,我得到一个OutOfMemoryException。

是否还有其他工具,库,策略来验证大于普通的XML文件?

编辑:SAX解决方案适用于java验证,但libxml工具的另外两个建议对于java之外的验证也非常有用。

4 个答案:

答案 0 :(得分:30)

使用SAXParser而不是使用DOMParser。这可以从输入流或读取器读取,因此您可以将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")));

答案 1 :(得分:8)

使用libxml执行验证具有流式传输模式。

答案 2 :(得分:3)

我个人喜欢使用具有命令行界面的XMLStarlet,并且在流上工作。它是一组基于Libxml2的工具。

答案 3 :(得分:1)

如前所述,

SAX和libXML会有所帮助。您还可以尝试使用-Xmx选项增加JVM的最大堆大小。例如。将最大堆大小设置为512MB:java -Xmx512m com.foo.MyClass