やや関連:Javaのlibxml2
はい、この質問はかなり長文です - 申し訳ありません。私は可能な限り高密度に保ちました。全体を読む前に簡単に確認できるように、質問を太字にしました。
sax の解析が dom の解析よりも速いのはなぜですか? 私が思いつくことができる唯一のことは、おそらくsaxを使用すると、受信データの大部分を無視しているため、気にしないxmlの部分を処理する時間を無駄にしないということです。IOW - SAX で解析した後、元の入力を再作成できません。 SAX パーサーがすべての xml ノードを考慮できるように (したがって、元のノードを再作成できるように) 記述した場合、DOM よりも高速ではないでしょうか?
私が尋ねている理由は、xml ドキュメントをより迅速に解析しようとしているからです。解析後にxmlツリー全体にアクセスする必要があります。サード パーティのサービスをプラグインするためのプラットフォームを作成しているため、xml ドキュメントのどの部分が必要で、どの部分が必要でないかを予測できません。入ってくるドキュメントの構造さえ知りません。これが、jaxb や sax を使用できない理由です。xml ドキュメントは小さく、一度に必要なメモリは 1 つだけなので、メモリ フットプリントは問題になりません。私を殺しているのは、この比較的小さな xml ドキュメントを解析するのにかかる時間です。以前にstaxを使用したことはありませんが、おそらく中間点である可能性があるため、さらに調査する必要がありますか? 私の理解が正しければ、 このように、元の解析時間は速いかもしれませんが、まだトラバースしていないツリーの部分をトラバースするように要求するたびに、処理が行われますか?
ほとんどの質問に回答するリンクを提供していただければ、私はあなたの回答を受け入れます (別の場所で既に回答されている場合は、私の質問に直接回答する必要はありません)。
更新: sax で書き直したところ、平均 2.1 ミリ秒でドキュメントが解析されました。これは、dom が取っていた 2.5 ミリ秒よりも改善 (16% 高速) ですが、私 (その他) が推測したほどではありません。
ありがとう