29

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

是否有任何其他工具、库、策略来验证比普通 XML 文件更大的文件?

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

4

4 回答 4

31

不要使用 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")));
于 2008-09-02T21:09:16.440 回答
8

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

于 2008-09-02T21:10:10.790 回答
3

就我个人而言,我喜欢使用XMLStarlet,它有一个命令行界面,并且适用于流。它是一套建立在 Libxml2 之上的工具。

于 2008-09-03T00:19:47.993 回答
1

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

于 2009-03-09T21:39:23.160 回答