验证巨大的XML文件

时间:2020-03-05 18:46:45  来源:igfitidea点击:

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

是否还有其他工具,库,策略可用于验证比正常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")));

回答

使用libxml,它执行验证并具有流模式。

回答

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

回答

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