Search code examples
c#xmllistviewnodesxmldocument

How to list only XML nodes located directly under the root node


For example, how can I list player1, player2, and player3 in a .NET 4.0 ListView?

<?xml version="1.0"?>
<players>
  <player1>
    <name>playername</name>
    <age>18</age>
    <gender>m</gender>
  </player1>
  <player2>
    <name>playername</name>
    <age>18</age>
    <gender>m</gender>
  </player2>
  <player3>
    <name>playername</name>
    <age>18</age>
    <gender>m</gender>
  </player3>
</players>

Solution

  • With Linq to XML (which I suggest you to use with .Net 4.0) you can get them:

    var xdoc = XDocument.Load(path_to_xml);
    var players = xdoc.Root.Elements();
    

    Or getting name attributes:

    var names = from p in xdoc.Root.Elements()
                select (string)p.Element("name");
    

    There is no benefit of XmlDocument usage, because it also loads all xml into memory. If you want to get only xml element names:

    var players = from p in xdoc.Root.Elements()
                  select p.Name.LocalName; // player1, player2, player3