|
■No77571 (くなーら さん) に返信 > 目的によって、どちらの手段を選べばいいのか、というのがあると思います。 > こういうときはコッチダヨ〜みたいな。
以下私見:
XmlReader / XmlWriter ストリームとして読み書きするクラス。 そのまま使うよりは、XmlDocument.Load や XDocument.CreateReader など、 他のクラスとの中継として利用されることの方が多いかもしれません。 メモリ使用量/処理速度ともに軽快であるのが長所ですが、先頭から末尾に 順次処理するモデルなので、ランダムアクセス的な処理は苦手です。 XmlDocument .NET 1.x 当時から使えるベーシックな実装。W3C の DOM API に準拠しており (Level 1 Core, Level 2 Core)、他プラットファームの XML パーサーと同様の操作で扱えます。 変更通知イベントを備えていることから、データソースとして扱うこともでき、汎用性が高いです。 ただしデータソースになれるぐらいですから、ドキュメント全体がメモリ上に ロードしたうえで操作するオブジェクトモデルなので、巨大な XML を扱う際には注意が必要です。 XDocument いわゆる Linq to XML。自分は大抵これを使っています。 読み書きとしては比較的簡単ですし、汎用性も高いのですが、 Linq モデルゆえ、Edit & Continue との相性が悪いのが難点でしょうか。 なお、Compact Framework には非対応です。 XmlSerializer メタデータ指定という特性上、大きな構造加工を行うような操作(たとえば XSLT など)の ためには使えませんが、XMLデータ全体を一括して読み書きできるのが強みです。 クラスの内容をXMLに保存し、それをクラスに戻すために使うのには便利ですが、 初めに XML ありきで、それに対応したクラスを用意するという逆パターンで 使おうとすると、期待通りのマッピングができずにハマってしまうことも…。 DataSet DataSet は ReadXml、GetXml、WriteXml メソッドなどを備えています。 たとえスキーマ付きの XML であっても、XmlDocument や XDocument で取り扱う場合、 各データは string 型前提で読み書きすることになりますが、型付きDataSet と 組み合わせれば、型に厳密性を求めることができます。重いのが難点ですが。
|