質問

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

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

編集:SAX ソリューションは Java 検証には機能しましたが、libxml ツールに関する他の 2 つの提案は、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, 、検証を実行します そして ストリーミングモードがあります。

個人的に使いたいのは XMLスターレット これはコマンドラインインターフェイスを備えており、ストリーム上で動作します。これは、Libxml2 に基づいて構築されたツールのセットです。

すでに述べたように、SAX と libXML が役に立ちます。-Xmx オプションを使用して、JVM の最大ヒープ サイズを増やしてみることもできます。例えば。最大ヒープ サイズを 512MB に設定するには、次のようにします。 java -Xmx512m com.foo.MyClass

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top