XmlDocument vs XDocument (Example and C# with Example



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); 

0 Comment's

Comment Form