5分ごとにログファイルをXMLファイルにダンプします。新しいファイルを開始します。私は最新のイベントだけでメモリにないので、タイマーでディスクに10秒ごとかそこらでそれを永続化するために好きで、人と思い、私が本当に好きXDocumentとXElementの、XML XDocumentをディスクにインクリメンタルに書き出し、有効なXMLを保持
_xDocument = XDocument.Parse("<LogEntires/>");
_xDocument.Root.Add(xElementLogEventList.ToArray());
_xDocument.Save(_outFileName);
を使用してきました必要に応じてファイルを調べることができます。しかし、XDocumentには文書全体を書き込むSave()メソッドとWriteTo()メソッドしかありません。そして、</Root>タグがないと推測すると、とにかに無効なXMLになります。
私の次の考えは、XmlWriterを使用してFileStreamを今度はフラッシュして、最後に</Root>タグを追加して追跡し、完全に完了してファイルを閉じるまで無効なXMLを持っています。
私は本当にディスクに有効なXMLを持っていたいと思います。ルートタグを書きたいと思ったら、次のフラッシュを作成した後、バックアップしてルートタグを削除してから、ストリームを書き込み、フラッシュします。 xmlWriterは前方のみですので、これを行う最も効率的な方法はわかりません。
有効なxmlをディスクに保存するのに、最後に新しい要素をストリーミングして、毎回ドキュメント全体を書き直すのではなく、最も効率的な方法は何ですか?私の恐れは、xDocument.AppendUpdatesToFile(_outfile)のような明白なもの、またはそのような明白なものが欠けていることです...
最終的なルートタグを効率的に見つけて削除し、ストリーミングの仕方?
私はXMLがこれに親しみがないことに同意します。すべての要素をルートレベルで一覧表示する限り。ルートレベルで許可されるタグは1つだけです。それは有効なXMLではありません。 – DanO
はい、有効なXMLではなく、有効なXMLフラグメントのコレクションです... http://msdn.microsoft.com/en-us/library/cakk7ha0(v=VS.100).aspx#Y136。あなたの目標に応じて、それはあなたのために働くかもしれません。 –