在C#中读取和迭代xml元素

时间:2015-01-28 01:39:05

标签: c# xml

我刚开始使用C#语言并且正在寻找一种方法来迭代xml文件中的元素和子元素。

我的xml看起来像这样 -

  <ServerList>
     <server name = "serverName1" username ="username" password ="password">
      <serviceName>serviceName</serviceName>
      <serviceName>serviceName</serviceName>
      <serviceName>serviceName</serviceName>
   </server>
<server name = "serverName2" username ="username" password = "password">
       <serviceName>serviceName</serviceName>
       <serviceName>serviceName</serviceName>
  </server>
<ServerList>

我只是在寻找一种方法,我可以浏览第一个服务器元素及其子元素,而不是下一个服务器元素及其子元素。

2 个答案:

答案 0 :(得分:2)

您可以使用LINQ to XML作为一种简单的方法:

XDocument xdoc = XDocument.Load("myXmlFile.xml");

var servers = xdoc.Descendants("server"); 
for (var server in servers) 
{
    var children = server.Elements(); 
    for (var child in children)
    {
        // Do what you want with the server and child here
    }
}

如果您需要更多信息,可能需要考虑使用XML反序列化。这将允许您定义映射到XML模式中的节点的类,将XML反序列化为强类型对象的图形,然后您可以迭代,过滤,转换等。如果您确定这种方法,我建议使用{ {3}},因为BCL XML序列化器很糟糕。

答案 1 :(得分:2)

后代很好,无论如何这里是一种递归方法

class Program
{
    static void Main(string[] args)
    {
        XElement x = XElement.Load("XMLFile1.xml");
        recursive(x.Elements());
        Console.ReadKey();
    }

    private static void recursive(IEnumerable<XElement> elements)
    {
        foreach (XElement n in elements)
        {
            Console.WriteLine(n.Name);
            Console.WriteLine("--");
            if (n.Descendants().Any())
            {
                recursive(n.Elements());
            }
            else
            {
             Console.WriteLine(n.Value.ToString());// End of node (leaf)
            }
        }
    }

}