2008-08-14 10 views
5

現在、XMLファイルを読み込み、マイナーチェンジ(一部の属性の値を変更)してもう一度書き戻そうとしています。StAXを使用してXML文書を少し修正しました

変更する必要がない場合は、StAXパーサー(javax.xml.stream.XMLStreamReader)を使用して各イベントを読み込み、変更したいかどうかを確認してから、StAXライター(javax.xml.stream.XMLStreamReader)に直接渡します。

残念ながら、それはあまり単純ではありません - 作者はイベントタイプとパーサーオブジェクトを取る方法がなく、writeAttributewriteStartElementのようなメソッドしかありません。明らかに、私は、XML文書で発生する可能性があるすべてのタイプの要素について大文字と小文字のswitch文を書くことができ、それをもう一度書き戻すことはできますが、単純なように思える。

StAXで読んだXML文書と非常によく似たXML文書を簡単に書くことができますか?

答えて

2

StAXはかなりうまく動作し、非常に高速です。私はそれを20 MBまでのXMLファイルを解析するプロジェクトで使用しました。私は徹底した分析はしていませんが、SAXよりもはるかに高速でした。

ご質問:ストリーミングとイベント処理の違い、AFAIKはコントロールです。ストリーミングAPIを使用すると、ドキュメントをステップごとに歩き回り、必要なコンテンツを取得できます。イベントベースのAPIでは、あなたが興味を持っているものだけを扱うことができます。

3

ちょっとしたことの後、答えはStreamバージョンではなくイベントリーダー/ライターバージョンを使用するように思われます。

最終的に私が動いて得たものである(すなわちjavax.xml.stream.XMLEventReaderとjavax.xml.stream.XMLEventWriter)

も参照してくださいhttp://www.devx.com/tips/Tip/37795

2

これはかなり古い質問ですが、他の誰かがこのようなものを探しているなら、別の選択肢があります:Woodstox Stax2拡張APIがあります:

XMLStreamWriter2.copyEventFromReader(XMLStreamReader2 r, boolean preserveEventData) 

ストリームライタを使用してストリームリーダーから現在のポイントイベントをコピーします。これは単純ではあるが非常に効率的です。私はそれを使って同様の修正を成功させました。

(XMLStreamWriter2などを取得する方法をすべてWoodstoxが提供するインスタンスはこれらの拡張バージョンを実装する - ?プラスラッパーは、誰かが同様に、「基本」スタックスバリアントを使用したい場合があります)

関連する問題