Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read child elements using C# from xml

Tags:

c#

xml

Greeting, What is the best practice to read all attributes from a child elements by ID attributes using C# in xml file listed down.

Thank you,

 <?xml version="1.0" encoding="utf-8"?>
 <WinDLN>

  <Program ID="1" Name="CIS562" StartDate="9/8/2010 5:50:00 PM" EndDate="9/8/2010 9:15:00 PM" />

  <Program ID="2" Name="CIS532" StartDate="10/8/2010 5:50:00 PM" EndDate="10/8/2010 9:15:00 PM" />

  <Program ID="3" Name="ECE552" StartDate="6/8/2010 5:50:00 PM" EndDate="6/8/2010 9:15:00 PM" />

</WinDLN>
like image 311
Eyla Avatar asked Mar 09 '26 19:03

Eyla


2 Answers

The following LINQ call should do the trick:

var attrs = 
  doc.Descendants("Program").First(prog =>
    prog.Attribute("ID").Value == "2").Attributes();

The Descendants method gives you all elements (anywhere) in the XML document that are named "Program". Using First, you can get the first one that matches some specified predicate (e.g. has "ID" equal to "2"). Note that you can use FirstOrDefault if you want to get null when there is no such element. Finally, Attributes gives you a collection of all attribtues of the element.

I think that using LINQ to XML if you can is preferrable - you'll write the same code when working with XML or other data sources, so reading and writing the code is easy (once you learn LINQ).

like image 103
Tomas Petricek Avatar answered Mar 12 '26 08:03

Tomas Petricek


There are many ways to do it, e.g. LINQ over XML. But using Xpath is definitely not dead yet:

class Program
{
    static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();
        string xml = @"... your xml ";
        doc.LoadXml(xml);
        // Using SelectNodes with Xpath
        XmlNodeList list = doc.SelectNodes("WinDLN/Program[@ID='2']");
        Console.WriteLine(list.Count); // prints 1
        list = doc.SelectNodes("WinDLN/Program[@ID]");
        Console.WriteLine(list.Count); // prints 3 (selected all IDs)
    }
}

What method you'll choose is most often a matter of taste, select the API you're most comfortable with.

like image 20
steinar Avatar answered Mar 12 '26 09:03

steinar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!