使用C#从xml读取子元素

时间:2010-10-24 02:18:43

标签: c# xml

问候语, 使用下面列出的xml文件中的C#通过ID属性从子元素读取所有属性的最佳做法是什么。

谢谢,

 <?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>

2 个答案:

答案 0 :(得分:4)

以下LINQ调用应该可以解决这个问题:

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

Descendants方法为您提供XML文档中名为“Program”的所有元素(任何位置)。使用First,您可以获得与某个指定谓词匹配的第一个(例如,“ID”等于“2”)。请注意,如果您希望在没有此类元素时获取FirstOrDefault,则可以使用null。最后,Attributes为您提供元素的所有属性的集合。

我认为如果可以的话,使用LINQ to XML是可取的 - 在使用XML或其他数据源时,您将编写相同的代码,因此读取和编写代码很容易(一旦您学习LINQ)。

答案 1 :(得分:3)

有很多方法可以做到这一点,例如: LINQ over XML。但是使用Xpath肯定还没有死:

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)
    }
}

您选择的方法通常是品味,选择您最熟悉的API。