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() };