29

XSD に対して大きな XML ファイルを検証する方法を見つけようとしています。...XML を検証する最良の方法...という質問を見ましたが、その回答はすべて、検証に Xerces ライブラリを使用することを示していました。唯一の問題は、そのライブラリを使用して 180 MB のファイルを検証すると、OutOfMemoryException が発生することです。

通常よりも大きな XML ファイルを検証するための他のツール、ライブラリ、戦略はありますか?

編集: SAX ソリューションは Java 検証で機能しましたが、libxml ツールに関する他の 2 つの提案は、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 に答える