XmlDocument vs XDocument (Example and C# with Example
comparison) There are several ways interact with an Xml file. 1. Xml Document 2. XDocument 3. XmlReader/XmlWriter Before LINQ to XML we were used XMLDocument for manipulations in XML like adding attributes, elements and so on. Now LINQ to XML uses XDocument for the same kind of thing. Syntaxes are much easier than XMLDocument and it requires a minimal amount of code. Also XDocument is mutch faster as XmlDocument. XmlDoucument is an old and dirty solution for query an XML document. I am going to show some examples of XmlDocument class and XDocument class class: Load XML file string filename = @"C:\temp\test.xml"; XmlDocument XmlDocument _doc = new XmlDocument(); _doc.Load(filename); XDocument XDocument _doc = XDocument.Load(fileName); Create XmlDocument XmlDocument 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 XDocument doc = new XDocument( new XElement("Root", new XAttribute("name", "value"), new XElement("Child", "text node")) ); /*result*/ "TextNode" Change InnerText of node in XML XmlDocument XmlNode node = _doc.SelectSingleNode("xmlRootNode"); node.InnerText = value; XDocument XElement rootNote = _doc.XPathSelectElement("xmlRootNode"); rootNode.Value = "New Value"; Save File after edit Make sure to safe the xml after any change. // Safe XmlDocument and XDocument _doc.Save(filename); Retrieve Values from XML XmlDocument XmlNode node = _doc.SelectSingleNode("xmlRootNode/levelOneChildNode"); string text = node.InnerText; XDocument XElement node = _doc.XPathSelectElement("xmlRootNode/levelOneChildNode"); string text = node.Value; Retrieve value from all from all child elements where attribute = something. XmlDocument List valueList = new List(); foreach (XmlNode n in nodelist) { if(n.Attributes["type"].InnerText == "City") { valueList.Add(n.Attributes["type"].InnerText); } } XDocument var accounts = _doc.XPathSelectElements("/data/summary/account").Where(c => c.Attribute("type").Value == "setting").Select(c => c.Value); Append a node XmlDocument XmlNode nodeToAppend = doc.CreateElement("SecondLevelNode"); nodeToAppend.InnerText = "This title is created by code"; /* Append node to parent */ XmlNode firstNode= _doc.SelectSingleNode("xmlRootNode/levelOneChildNode"); firstNode.AppendChild(nodeToAppend); /*After a change make sure to safe the document*/ _doc.Save(fileName); XDocument _doc.XPathSelectElement("ServerManagerSettings/TcpSocket").Add(new XElement("SecondLevelNode")); /*After a change make sure to safe the document*/ _doc.Save(fileName);