[解決済み] XDocument または XmlDocument
質問
私は今、以下のことを学んでいます。
XmlDocument
に遭遇してしまったのですが
XDocument
その違いや利点について検索しても、有用な情報が得られません。
解決方法は?
.NETバージョン3.0以下を使用している場合、以下のようになります。
ある
を使用することで
XmlDocument
という古典的な DOM API があります。同様に、これを期待する他の API もいくつかあることがわかるでしょう。
しかし、もし選択肢があるのなら、私は徹底的に
XDocument
別名LINQ to XML。それは
大いに
ドキュメントを作るのも、それを処理するのも、よりシンプルになりました。例えば、このような違いです。
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("root");
root.SetAttribute("name", "value");
XmlElement child = doc.CreateElement("child");
child.InnerText = "text node";
root.AppendChild(child);
doc.AppendChild(root);
そして
XDocument doc = new XDocument(
new XElement("root",
new XAttribute("name", "value"),
new XElement("child", "text node")));
LINQ to XMLでは、私がこれまで見てきた他のXML APIとは異なり、名前空間がかなり簡単に扱えるようになっています。
XNamespace ns = "http://somewhere.com";
XElement element = new XElement(ns + "elementName");
// etc
LINQ to XMLはLINQとも非常に相性がよく、その構築モデルによって、サブ要素のシーケンスを持つ要素を実に簡単に構築することができます。
// Customers is a List<Customer>
XElement customersElement = new XElement("customers",
customers.Select(c => new XElement("customer",
new XAttribute("name", c.Name),
new XAttribute("lastSeen", c.LastOrder)
new XElement("address",
new XAttribute("town", c.Town),
new XAttribute("firstline", c.Address1),
// etc
));
これは、一般的なLINQのスタイルに合致するものです。
さて、ブラノンが言ったように、これらはストリーミングではなくインメモリAPIです(ただし
XStreamingElement
は遅延出力に対応しています)。
XmlReader
と
XmlWriter
は、.NETでXMLをストリーミングする通常の方法ですが、すべてのAPIをある程度混在させることができます。たとえば、大きなドキュメントをストリーミングしながら、LINQ to XMLを使用するために
XmlReader
を要素の先頭で読み出し、その後に
XElement
を処理し、次の要素に移るなど。この手法については、様々なブログ記事があります。
検索して見つけたのはこちらです。
.
関連
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み] XmlDocument を文字列に変換する。
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] ASP.NET Identity - HttpContextにはGetOwinContext用の拡張メソッドがありません。
-
[解決済み] 文字列から XDocument を生成する
-
[解決済み] XDocumentとXmlDocumentの相互変換
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】C#で四捨五入する方法
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み] "式はノードセットとして評価されなければならない"