2011-04-28 139 views
3

我在一個XDocument下面的XML(在調試器檢查確認)使用產生XDocument.Parse(myXmlString)幫助的LINQ to XML查詢

<Size> 
    <row SizeId="239" Title="XXS" Quantity="20"/> 
    <row SizeId="240" Title="XS" Quantity="15"/> 
    <row SizeId="241" Title="S" Quantity="12"/> 
    <row SizeId="242" Title="M" Quantity="18"/> 
</Size> 

我試圖將其轉換爲列表對象聲明爲:

public class SizeQuantityXml 
{ 
    public int SizeId { get; set; } 
    public string Title { get; set; } 
    public int Quantity { get; set; } 
} 

但是,當我做到這一點的只有sizeQuantityXmlList在它的第一個 「行」:

List<SizeQuantityXml> sizeQuantityXmlList = 

(from x in xDocument.Descendants("Size") 
select new SizeQuantityXml() { SizeId = (int)x.Element("row").Attribute("SizeId"), 
           Title = (string)x.Element("row").Attribute("Title"), 
           Quantity = (int)x.Element("row").Attribute("Quantity") } 
).ToList(); 

這是我的第一個Linq to XML嘗試任何建議不勝感激:-)

回答

3

您正在查詢Size元素 - 你只有一個。你想行的集合,而不是:

var query = from row in xDocument.Element("Size").Descendants("row") 
      select new SizeQuantityXml() 
      { 
       SizeId = (int)row.Attribute("SizeId"), 
       Title = (string)row.Attribute("Title"), 
       Quantity = (int)row.Attribute("Quantity") 
      }; 

var sizeQuantityXmlList = query.ToList(); 

編輯:如果你的XML從您發佈有什麼不同

建議的解決方案將無法正常工作(例如,由多個父標籤包裹)。正如最初提議的那樣嘗試Descendants("Size").Descendants("row")

+0

感謝您的快速回復,但不幸的是這給了我一個{「未將對象引用設置到對象的實例。」}例外:-( – Rob 2011-04-28 11:23:43

+0

你能嘗試更新的版本?我已經在你的自定義XML字符串同時運行他們似乎工作 – 2011-04-28 11:25:36

+0

真棒!感謝隊友的第二個版本的作品,我有點累,我想我可能有第一次有後裔(「大小」)而不是元素(「大小」) - 再次感謝 – Rob 2011-04-28 11:33:13