繁体   English   中英

使用C#从xml读取子元素

[英]Read child elements using C# from 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>

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

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

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

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

有很多方法可以做到这一点,例如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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM