2012-02-10 3 views
3

libxml2の例の大半は、XMLファイルのロード/解析に関するものです。しかし、私はそれらを書くことにのみ興味があります。コードはファイルを解析する必要はありません。 using different writersの例があり、filememoryDOMおよびtreeモデルの使用方法を示しています。libxml2ライターの違い

コードを調べると、私はそれらを書くときに大きな違いは見られません。誰がどのようなものを使うのが良いかをどのように決定するのですか? (言い換えれば、他のものよりも良い場合はどちらですか?)

答えて

2

あなたが指定する4つの機能の違いは、最小限に抑えられています。内容はどこに行くのですか?アレックスが言及したように、メモリが懸念されるならば、xmlNewTextWriterFilenameを使うことは結果をメモリに保持する必要がないという利点があります。

上記のすべてのメソッドが属するxmlWriter APIは、提供されるAPIの1つです。もう1つはtree APIです。 xmlWriterは、ファイルに出力するwrite()を呼び出すのによく似ています。ツリーはメモリ内のネストされた構造体のようなものです。

データが非線形関数で構築され、後で情報に基づいて追加/変更するなどの場合、ツリーベースのバージョンが有効です。これには、ストリーミングxmlWriterインターフェイスでの回避策やキャッシュが必要ですあなたが出力されたら一度変更することはできません。しかし、メモリ内のツリーは、シリアル化される瞬間まで完全に調整することができます。

ツリーAPIには、メモリ全体をメモリに保持しなければならないという欠点があります。経験則は、解析されたツリーのメモリ要件は、直列化されたxmlファイルのサイズの4倍のサイズです。

私の判断は、通常、大きな文書を作成するかどうかによって決まります。もしそうでなければ、ツリーapiなら、私はそれを使います。私が望むなら、柔軟性がそこにあるでしょう。効率が懸念される場合や、大きなものを扱う場合は、ストリーミングxmlWriterを使用してください。

ツリーAPIの例は、次のとおりです。http://xmlsoft.org/examples/index.html#Tree

1

メモリが限られているデバイスを使用している場合は、DOMまたはメモリベースのアプローチを使用しない方がいいでしょう。その場合は、XMLに書き込むデータ構造を反復処理するときに、ファイルを書き出すことをお勧めします。