2011-12-08 5 views
2

私は非常に大きなXMLファイル(500Mb)を持っています。この場合、最後に解析された要素の位置を追跡することは可能ですか?だから、もし私が正常に半分を解析したり、jvmが突然クラッシュした場合、私は前回の位置からすぐに始めることができます。Stax:どのようにXMLファイルの特定の位置から解析するのですか?

+0

任意の 'XMLEvent'から[' Location'](http://woodstox.codehaus.org/javadoc/stax-api/1.0/javax/xml/stream/Location.html)を入手し、どこかに保存することができますしかし、それは与えられた位置でリーダーを再起動するのに十分な情報を含んでいません。それは、あなたがあなたがどこを離れて戻ってくるまで、文書を早送りすることを可能にします。 – Barend

答えて

1

構文解析したポイントまで構造体を格納するために、おそらく履歴ストアのいくつかの形式を書くことができます。しかし、私はその時点から構文解析を続けると、あなたのパーサ上のすべての形式の検証をオフにする必要があると思われます.XMLはドキュメントの構造と内容を頭から足まで保証することを意図しています。アドホックな解析のために設計されたものではありません。

場合によっては、現在の作業要素ツリーをメモリに保持し、関連するヘッダー情報と連結して、あたかも新しいファイル。ファイル全体の代わりに未処理のコンテンツのみを送信します。

例えば、XML構造与えられる:

<root> 
    <child id="1"> 
    <subchild id="1'/> 
    </child> 
    <child id="2'> 
    <subchild id="2"/> 
    <subchild id="3"/> 
    <child/> 

パーサーがクラッシュ<child id="1"/>を解析した後、あなたが<root>要素を含む新しい擬似documnentを作る、とものノートを保持する必要がある場合依存関係の問題が発生した場合には、処理を再開するときにすでに子1を解析しているという事実です。

関連する問題