2016-12-07 25 views
0

私は大容量のXMLファイルを300mb持っています。これをXSLTで変換しようとすると、メモリエラーが発生してしまいます。そのエラーを発生させずにXMLファイルを正常に変換できます。VB6とXSLTを使用して大規模なXMLファイルを変換する

私はVB6を使用してXMLをXSLT 1.0で変換し、imはDOMDocumentを使用してXMLドキュメントをロードしています。

+0

MSXML IXSLProcessorはDOMからの入力を受け入れる必要がありますが、その出力はSAXライターを介して送信できます。これは、出力DOMのメモリペナルティを排除します。 – Bob77

+1

可能であれば、XSLTを完全に破棄し、SAX入出力を使用して変換するカスタムプログラムを作成します。 XSLTは、限られたスクリプト環境での軽量使用のために設計されています。 – Bob77

答えて

1

ここではかなり古代のテクノロジーを使用していますが、あなたがその環境に永遠に拘束されているかどうかは疑問からはっきりしません。

300Mbは、Saxonなどの最新のXSLTプロセッサを使用して実行できますが、おそらく2Gbのメモリが必要になります。多くのXSLTプロセッサには、DOMよりも空間効率の良い内部ツリーモデルがありますが、MSXMLをどこに置いているのか分かりません。

あなたが行っている変換やストリーミングに適しているかどうか(つまり、メモリ内にツリーモデル全体を構築しないで処理するかどうか)はわかりません。潜在的にストリーム可能な場合は、(XSLT 3.0を含む)さまざまなアプローチが考えられますが、VB6のオプションは非常に限られている可能性があります。

0

Bob77が指摘しているように、この軽量テクノロジを使用してに確実に変換し、XSLT変換を書き直す必要があります。

クラスモジュールを作成し、文Implements IVBSAXContentHandlerを含めます。

それが読まれると、ファイルが解析されているとして、場で必要な変更を行うには、イベントIVBSAXContentHandler_startElementIVBSAXContentHandler_endElementを使用してください。

すぐに使用できるSAXクラスの例は、MSDNで十分です。

関連する問題