2010-10-24 112 views
3

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

谢谢

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

回答

4

以下LINQ调用应该做的伎俩:

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

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

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

3

有很多方法可以做到,基于XML的LINQ。但是,使用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。

+0

作品和感谢 – 2011-02-23 11:57:43