XDocument または XmlDocument 質問する

XDocument または XmlDocument 質問する

私は今学んでいますXmlDocumentしかし、私はちょうどXDocumentそれらの違いや利点を検索しようとしても、役に立つものが見つからないので、どちらか一方を使用する理由を教えていただけますか?

ベストアンサー1

.NET バージョン 3.0 以下を使用している場合は、いわゆるクラシック DOM APIを使用する必要がありますXmlDocument。同様に、これを必要とする他の A​​PI もいくつかあります。

ただし、選択できる場合は、XDocumentLINQ 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 を使用できます。この手法については、さまざまなブログ投稿があります。ちょっと検索して見つけたのがこれ

おすすめ記事