c sharp

How to Parse XML Files with C# XML Parser

XML files are pretty common especially when working with configuration files. They are powerful in such a way that they provide a widely recognizable format.

In this tutorial, we will learn how to use the C# tools and features to serialize and deserialize the XML files.

Sample XML File

Before we begin, we start by setting up a basic XML file for demonstration purposes. For example, the following shows a basic XML file that represents a database configuration.

NOTE: The following file does not represent any real-world configuration or layout. This is for testing purposes and might be incorrect.

<DatabaseConfigurations>

  <DatabaseConfiguration>

    <ServerName>localhost</ServerName>

    <DatabaseName>public</DatabaseName>

    <UserID>root</UserID>

    <Password>password</Password>

  </DatabaseConfiguration>

  <DatabaseConfiguration>

    <ServerName>remote</ServerName>

    <DatabaseName>prod</DatabaseName>

    <UserID>root</UserID>

    <Password>complexpass</Password>

  </DatabaseConfiguration>

</DatabaseConfigurations>

Once we have the sample file ready to go, we can proceed and discuss how to serialize and deserialize the file.

Setting Up the Class

The first thing that we need to do is to create a class that corresponds to the layout of the elements that are provided in the XML file. This allows us to map the data that is stored in the XML file into a format or class that C# can understand.

In our case, we can define the class as follows:

using System;
using System.Collections.Generic;
using System.Xml.Serialization;

[XmlRoot("DatabaseConfigurations")]
public class DatabaseConfigurations
{
    [XmlElement("DatabaseConfiguration")]
    public List<DatabaseConfiguration> Configurations { get; set; }
}

public class DatabaseConfiguration
{
    [XmlElement("ServerName")]
    public string ServerName { get; set; }

    [XmlElement("DatabaseName")]
    public string DatabaseName { get; set; }

    [XmlElement("UserID")]
    public string UserID { get; set; }

    [XmlElement("Password")]
    public string Password { get; set; }
}

In this case, we start by defining a class called “DatabaseConfiguration” that stores the data as a list. The class also extracts each element from the XML file using a “get” and “set” accessor methods.

Serialize the Object

Once the object is ready, we can proceed and convert it into an XML format as shown in the following example code:

public class Program
{
    public static void Main()
    {
        DatabaseConfigurations dbConfigs = new DatabaseConfigurations
        {
            Configurations = new List<DatabaseConfiguration>
            {
                new DatabaseConfiguration
                {
                    ServerName = "localhost",
                    DatabaseName = "public",
                    UserID = "root",
                    Password = "password"
                },
                new DatabaseConfiguration
                {
                    ServerName = "remote",
                    DatabaseName = "prod",
                    UserID = "root",
                    Password = "complexpass"
                }
            }
        };

        XmlSerializer serializer = new XmlSerializer(typeof(DatabaseConfigurations));
        using (TextWriter writer = new StreamWriter("dbconfigs.xml"))
        {
            serializer.Serialize(writer, dbConfigs);
        }

        Console.WriteLine("XML file saved!");
    }
}

What this code does is that it takes the object that we created earlier which represents the layout of an XML file and converts into an XML entity.

Deserialize the Object

We can read an XML file into a C# object which is also known as deserialization. An example is as follows:

using System;
using System.IO;
using System.Xml.Serialization;

public class Program
{
    public static void Main()
    {
        XmlSerializer serializer = new XmlSerializer(typeof(DatabaseConfigurations));
        DatabaseConfigurations dbConfigs;

        using (TextReader reader = new StreamReader("config.xml"))
        {
            dbConfigs = (DatabaseConfigurations)serializer.Deserialize(reader);
        }

        foreach (var config in dbConfigs.Configurations)
        {
            Console.WriteLine($"ServerName: {config.ServerName}, DatabaseName: {config.DatabaseName}, UserID: {config.UserID}, Password: {config.Password}");
        }
    }
}

This should read the data from the XML file and convert it into a valid object.

Conclusion

In this basic tutorial, we covered the fundamentals of serializing and deserializing the XML files and objects in C# using the XML parser.

About the author

John Otieno

My name is John and am a fellow geek like you. I am passionate about all things computers from Hardware, Operating systems to Programming. My dream is to share my knowledge with the world and help out fellow geeks. Follow my content by subscribing to LinuxHint mailing list