[英]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.