2011-06-11 58 views
2

我想熟悉使用XDocument API來使用lambda語法來解析XML。XDocument - 表達式幫助

我想要做的是根據以下XML結構創建一個IEnumerable列表Product。我知道如何獲得所有product節點,但我想要獲得每個產品節點name屬性,然後從「產品」節點中選擇每個item節點並解析其值。

所以我想利用這個XML:

<products> 
    <product name="Prod1"> 
    <item hwid="abk9184"> 
     <href>Prod1/abk9184_en-us/abk9184.html</href> 
     <localization>en-us</localization> 
     <build.start>2011-06-08 22:02 PM</build.start> 
     <build.icp>9.0.192.32</build.icp> 
    </item> 
    <item hwid="abk9185"> 
     <href>Prod1/abk9185_en-us/abk9185.html</href> 
     <localization>en-us</localization> 
     <build.start>2011-06-08 22:03 PM</build.start> 
     <build.icp>9.0.192.32</build.icp> 
    </item> 
    </product> 
    <product name="Prod2"> 
    <item hwid="aa6410"> 
     <href>Prod2/aa6410_en-us/aa6410.html</href> 
     <localization>en-us</localization> 
     <build.start>2011-06-08 22:04 PM</build.start> 
     <build.icp>9.0.192.32</build.icp> 
    </item> 
    </product> 
</products> 

,並從中我想獲得這些列表:

public class Product 
{ 
    public string Name { get; set; } 
    public string Hwid { get; set; } 
    public string Href { get; set; } 
    public string Localization { get; set; } 
    public DateTime BuildDateTime { get; set; } 
    public string IcpBuildVersion { get; set; } 
} 

所以,雖然我有2個產品節點我竟又與每個的許多產品實例。我想學習如何使用XDocument和lambda語法來完成此操作。有人能告訴我方式嗎?

IEnumerable<Product> products = xDocument.Decendants("product") 
           .Select(e => new Product { Name = e.Name }) 

但認爲必須有一些循環來獲取每個產品的每個項目。

回答

1
var products = document.Descendants("item") 
    .Select(arg => 
     new Product 
     { 
      Name = arg.Parent.Attribute("name").Value, 
      Hwid = arg.Attribute("hwid").Value, 
      Href = arg.Element("href").Value, 
      Localization = arg.Element("localization").Value, 
      BuildDateTime = DateTime.Parse(arg.Element("build.start").Value), 
      IcpBuildVersion = arg.Element("build.icp").Value 
     }) 
    .ToList(); 
+0

哦這麼簡單:)謝謝 – Nick 2011-06-11 05:18:53