サーバー上の巨大なxmlファイルを解析してクライアントに送信する必要があります。
オンデマンドで解析を実行したい-つまり、最初は親ノードのみを解析して表示し、クライアントが親ノードをクリックしたときに-サーバーにリクエストを送信して、どちらの親が選択されたかを通知し、次にその子を解析して送信します(ここでも、サブツリー全体ではなく、親のみ)。
STAXパーサーを使用することを考えましたが、親子関係に関しては、STAXパーサーの操作方法がわかりません。子である次のSTART-ELEMENTに進むのではなく、そのレベルの次の親にスキップするようにパーサーに指示するにはどうすればよいですか?また、ITERATORの実装に戻る方法はありますか?片方の親を選んでその子を見た後、戻って前の親に会うことはできますか?
何か提案をいただければ幸いです。
ありがとうございました。
3451 次
1 に答える
3
いいえ、最初に解析せずにXMLドキュメントのサブツリーをスキップすることはできません。これは、StAXだけでなく、すべてのパーサーに当てはまります。(スキップするポイントを知っているということは、その間の要素をすでに解析していることを意味します。)
ただし、開始要素イベントごとにインクリメントし、終了要素イベントごとにデクリメントするネストレベルカウンターを維持することで、ターゲットレベルより下のレベルから発生するすべてのイベントを簡単に無視できます。
解析は一方向であり、ランダムアクセスではありません。前後にジャンプすることはできません。(繰り返しになりますが、これは、パーサーがこれまでに解析されたすべての表現を格納することを前提としています。これは、StAXが回避するために作成されたものです。)ただし、もちろん、各親タグのバイト位置をファイルに記録してから、後で試すことができます。ランダムアクセス用にファイルを開いている場合は、それを探してください。ただし、このアプローチにはかなりの落とし穴があります。
全体として、ユースケースはStAXに適しているようには見えません。VTD-XMLを試しましたか?ファイルの大きさにもよりますが、まさにあなたが望むものにすることができます。
于 2012-10-28T11:35:53.983 に答える