XDocument到对象列表

XDocument的内容是下面的XML。

我想获得一个List(),请参阅此消息的末尾。

            public class MyData { public string MainCode { get; set; } public string Code { get; set; } public string Value { get; set; } } 

我想要一个List()这个内容应该是这样的:

 new MyData { MainCode = "01"; Code = "A"; Value = "A1" }; new MyData { MainCode = "01"; Code = "B"; Value = "B1" }; new MyData { MainCode = "02"; Code = "A"; Value = "A2" }; new MyData { MainCode = "02"; Code = "D"; Value = "D2" }; 

当然 – 所以你需要这样的东西:

 var query = from datas in doc.Root.Elements("myDatas") let code = (string) datas.Attribute("code") from data in datas.Elements("myData") select new MyData { MainCode = code, Code = (string) data.Attribute("name"), Value = (string) data.Attribute("value"), }; var list = query.ToList(); 

请注意多个from子句以展平结果。

另一种选择是找到所有“叶子”元素并从父代获取代码部分:

 var query = from data in doc.Descendants("myData") select new MyData { MainCode = (string) data.Parent.Attribute("code"), Code = (string) data.Attribute("name"), Value = (string) data.Attribute("value"), }; var list = query.ToList(); 

编辑:如果您的文档使用命名空间,这也很容易:

 XNamespace ns = "http://the-uri-of-the-namespace"; var query = from data in doc.Descendants(ns + "myData") ... 

这使用XName operator +(XNamespace, string)重载运算符。