LINQ to XML と DOM の比較

このページでは LINQ to XML と DOM の違いをまとめています。

  • 言語は C# です。
  • DOM は using System.Xml; LINQ to XML は using System.Xml.Linq; が必要です。
    • XPath を使用する場合は using System.Xml.XPath; が必要です。

型の比較表

  DOM LINQ to XML
ドキュメント XmlDocument XDocument
ノード XmlNode XNode
要素 XmlElement XElement
テキスト XmlText XText
コメント XmlComment XComment
処理命令 XmlProcessingInstruction XProcessingInstruction
フラグメント XmlDocumentFragment なし

操作の比較表

  DOM LINQ to XML
  要素の生成 el = doc.CreateElement("a"); el = new XElement("a");
     生成 (+名前空間) el = doc.CreateElementNS("a", "..."); el = new XElement((XNamespace) "..." + "a");
     追加 parent.AppendChild(child); parent.Add(child);
     追加 (手前) parent.InsertBefore(el, refEl); refEl.AddBeforeSelf(el);
     取得 (タグ名) doc.GetElementsByTagName("a"); doc.Descendants("a");
     取得 (ID) doc.GetElementById("..."); doc.Descendants().FirstOrDefault(
  el => (string)el.Attribute("id") == "...");
     取得 (XPath) doc.SelectNodes("//a"); doc.XPathSelectElements("//a");
     取得 (親) parent = el.ParentNode; parent = el.Parent;
     取得 (次) el2 = el.SelectSingleNode("following-sibling::*"); el2 = el.ElementsAfterSelf().FirstOrDefault();
     取得 (前) el2 = el.SelectSingleNode("preceding-sibling::*"); el2 = el.ElementsBeforeSelf().FirstOrDefault();
 ノードの取得 (次) n = el.NextSibling; n = el.NextNode;
     取得 (前) n = el.PreviousSibling; n = el.PreviousNode;
  属性の取得 el.GetAttribute("href"); (string)el.Attribute("href");
     設定 el.SetAttribute("href", "..."); el.SetAttributeValue("href", "...");
テキストの取得 var text = el.InnerText; var text = el.Value;
     設定 el.InnerText = "text"; el.Value = "text";

参考