私は今学んでいますXmlDocument
しかし、私はちょうどXDocument
それらの違いや利点を検索しようとしても、役に立つものが見つからないので、どちらか一方を使用する理由を教えていただけますか?
ベストアンサー1
.NET バージョン 3.0 以下を使用している場合は、いわゆるクラシック DOM APIを使用する必要がありますXmlDocument
。同様に、これを必要とする他の 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 スタイルに適合しています。
Brannon が述べたように、これらはストリーミング API ではなくメモリ内 API です (ただし、XStreamingElement
遅延出力はサポートされています)。XmlReader
および はXmlWriter
.NET で XML をストリーミングする通常の方法ですが、ある程度はすべての API を混在させることができます。たとえば、大きなドキュメントをストリーミングしながら、XmlReader
要素の先頭に を配置し、XElement
そこから を読み取って処理し、次の要素に進むなどして LINQ to XML を使用できます。この手法については、さまざまなブログ投稿があります。ちょっと検索して見つけたのがこれ。