VTD-XML を使用して、親要素から一連の子要素を削除しようとしています。
残念ながら、要素を削除した後、削除された要素が以前占有していた新しい行が残ります。この動作は、VTD-XML の作成者による VTD-XML に関する記事の読者によっても確認されています。この新しい行を削除する方法を考えています。
基礎となる 64 ビット VTD トークンに格納されている長さの値を操作して、改行文字 (追加の 2 バイト) をカバーすることで、わずかな成功を収めることができました。コード スニペットは次のとおりです。
// XMLModifier modifier
modifier.remove(vn.getElementFragment()+0x200000000L);
VTD-XML の例でold_cd.xml
提供されているものでこれがうまく機能することをテストしました。ex_16
ただし、作業ファイルでこの同じアプローチModifyException
を試みると、 を呼び出そうとするとエラーがスローされます。modifier.output()
具体的には によってスローされmodifier.check2()
ます。
質問
1. 上記のアプローチが更新を参照してください。check2()
失敗するのはなぜですか? VTD トークンのビットがオーバーフローしているとは思いません。ファイルは 2MB 未満です。
2.残りの新しい行を削除するためのより良い方法はありますか?
私はまだ VTD-XML にかなり慣れていないので、経験豊富なユーザーからアドバイスや洞察を得ることができれば幸いです。
ご協力いただきありがとうございます。
更新
うわー、この質問を書いている過程で、さまざまな文字エンコーディングを考慮するのを忘れていたことに気づき、長い値を1バイトに調整してcheck2()
問題を修正しました! (時間をかけて一時停止し、問題を再考/書き出すもう1つの理由)。
これに対するより良いアプローチがあるかどうか、経験豊富なユーザーから知りたいです。