Coder Perfect

In C#, how can I read and parse an XML file?


In C#, how can I read and parse an XML file?

Asked by Gajendra

Solution #1

To read an XML document from a string or a file, use XmlDocument.

using System.Xml;

XmlDocument doc = new XmlDocument();



Then look for a node underneath it, such as this.

XmlNode node = doc.DocumentElement.SelectSingleNode("/book/title");


foreach(XmlNode node in doc.DocumentElement.ChildNodes){
   string text = node.InnerText; //or loop through its children as well

then read the text within that node as follows:

string text = node.InnerText;

or examine a property

string attr = node.Attributes["theattributename"]?.InnerText

Always check for null on Attributes[“something”] since if the attribute does not exist, it will be null.

Answered by Wolf5

Solution #2

// Loading from a file, you can also load from a stream
var xml = XDocument.Load(@"C:\contacts.xml");

// Query the data and write out a subset of contacts
var query = from c in xml.Root.Descendants("contact")
            where (int)c.Attribute("id") < 4
            select c.Element("firstName").Value + " " +

foreach (string name in query)
    Console.WriteLine("Contact's Full Name: {0}", name);

MSDN’s LINQ to XML is a good place to start.

Answered by Konstantin Tarkus

Solution #3

Here’s a programme I created to read xml sitemaps:

using System;
using System.Collections.Generic;
using System.Windows.Forms; 
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data;
using System.Xml;

namespace SiteMapReader
    class Program
        static void Main(string[] args)
            Console.WriteLine("Please Enter the Location of the file");

            // get the location we want to get the sitemaps from 
            string dirLoc = Console.ReadLine();

            // get all the sitemaps 
            string[] sitemaps = Directory.GetFiles(dirLoc);
            StreamWriter sw = new StreamWriter(Application.StartupPath + @"\locs.txt", true);

            // loop through each file 
            foreach (string sitemap in sitemaps)
                    // new xdoc instance 
                    XmlDocument xDoc = new XmlDocument();

                    //load up the xml from the location 

                    // cycle through each child noed 
                    foreach (XmlNode node in xDoc.DocumentElement.ChildNodes)
                        // first node is the url ... have to go to nexted loc node 
                        foreach (XmlNode locNode in node)
                            // thereare a couple child nodes here so only take data from node named loc 
                            if (locNode.Name == "loc")
                                // get the content of the loc node 
                                string loc = locNode.InnerText;

                                // write it to the console so you can see its working 
                                Console.WriteLine(loc + Environment.NewLine);

                                // write it to the file 
                                sw.Write(loc + Environment.NewLine);
                catch { }
            Console.WriteLine("All Done :-)"); 

        static void readSitemap()

Answered by ajzeffer

Solution #4

There are numerous options, including the following:

Answered by eglasius

Solution #5

To read XML strings, you may use a DataSet.

var xmlString = File.ReadAllText(FILE_PATH);
var stringReader = new StringReader(xmlString);
var dsSet = new DataSet();

I’m posting this for the purpose of transparency.

Answered by prasanna venkatesh

Post is based on