问候语, 使用下面列出的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>
答案 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。