大きなXSDに対して大きなXML文書をすばやく検証しようとしています。 XMLは500〜39000行のどこにでも置くことができ、XSDは2000〜3000行の領域にあります。大きなXSDに対して大きなXMLファイルを検証するには、これをすばやく行う方法はありますか?
これまでの結果ではパフォーマンスが著しく低下しました。このような大きなXSDを持つパーサーの初期化には最大30秒かかることがありますが、これを1回実行してから注入することができます。
しかし、これを実際にXMLの検証に使用する場合、実装に応じて30秒から2分の任意の時間がかかります。
これは、コマンドラインツールと呼ばれるxmllintとして本当に奇妙です: xmllint --schema test.xsd valid.xml
が同じ仕事をすることができますが、すぐに終了します。
私はJDOMライブラリ、SAXReader方法を試してみたと私はjdom2ものに落ち着いてきた、ここで私はそれを構築しています方法は次のとおりです。
:URL xsd = Resources.getResource("test-xml/test.xsd");
XMLReaderJDOMFactory factory = new XMLReaderXSDFactory(xsd);
builder = new SAXBuilder(factory);
そして、ここでは、アクションで解析です
InputStream stream = new ByteArrayInputStream(inputXml.getBytes());
Document document = builder.build(stream);
builder.build部分は、境界線の瞬間である必要がある行です。
目的の解決策の観点からは、出力が読みやすく素早い限り、C、Kotlinを使用しても構いません。
おかげ
ことで解析するのにかかった50秒よりも著しく低いですWebから:おそらくW3C WebサイトのXML名前空間のスキーマなどのリソース。 W3Cは意図的にそのような要求を減速させ、それらを落胆させます。フェッチしているリソース(ネットワーク監視など)を見つけ、ローカルコピーで置き換えます。 –
ちなみに、XMLファイルとXSDファイルのどちらも「大」とは記述しません。サイズは私にとっては非常に控えめなようです。 –
ねえ、私たちはその理由を知ったので、私はただその答えを今作っています。 –