2010-10-24 153 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