C#LINQ with XML,无法将具有相同名称的多个字段提取到对象中

尝试使用LINQ XML将以下XML文件(可以更改)读入对象。

   Adjustment Report pdf adobe_pdf     Excel True  adjustment report   (?<ssn>\d{3}-\d{2}-\d{4})  "(?<last>\s{0,1}[AZ-'.]+\s{0,1}[AZ-'.]+),(?<first>\s[AZ-'.]+\s{0,1})(?<middle>[AZ][.]|\s{0,1})"> "(?<ssn>\d{3}-\d{2}-\d{4})" "(?<total>\$[,/d]+)(?<adjust>\$[,/d]+)(?<monthly>\$[,/d]+)"   

什么是无效的是将多个元素读入对象。 我只能阅读第一个。 显然,持有该字段的Object需要是一个数组? 这是我到目前为止的代码。

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Xml.Linq; namespace ElementDemo { class Program { static void Main(string[] args) { XElement xml = XElement.Load("C:\\TEMP\\test.xml"); var reports = from report in xml.Descendants("report") where report.Element("name").Value.Contains("Adjustment Report") select new { Name = report.Element("name").Value, Extension = report.Element("extension").Value, FileType = report.Element("filetype").Value, // Fields : How is this done? }; foreach(var obj in reports) { Console.WriteLine("Name: " + obj.Name ); }; Console.ReadLine(); } } } 

提前致谢。

使用Elements方法获取所有field元素,然后调用Select将它们转换为对象。

例如:

 var reports = from report in xml.Descendants("report") where report.Element("name").Value.Contains("Adjustment Report") select new { Name = report.Element("name").Value, Extension = report.Element("extension").Value, FileType = report.Element("filetype").Value, Fields = report.Elements("field") .Select(f => new { Name = f.Attribute("name").Value, Type = f.Attribute("type").Value }).ToArray() };