验证巨大的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