<?xml version="1.0" standalone="yes"?>
<CompanyInfo>
<Employee name="Jon" deptId="123">
<Region name="West">
<Area code="96" />
</Region>
<Region name="East">
<Area code="88" />
</Region>
</Employee>
</CompanyInfo>
public class Employee
{
public string EmployeeName { get; set; }
public string DeptId { get; set; }
public List<string> RegionList {get; set;}
}
public class Region
{
public string RegionName { get; set; }
public string AreaCode { get; set; }
}
我正在尝试读取这个XML数据,到目前为止我尝试了以下方法:
XDocument xml = XDocument.Load(@"C:\data.xml");
var xElement = xml.Element("CompanyInfo");
if (xElement != null)
foreach (var child in xElement.Elements())
{
Console.WriteLine(child.Name);
foreach (var item in child.Attributes())
{
Console.WriteLine(item.Name + ": " + item.Value);
}
foreach (var childElement in child.Elements())
{
Console.WriteLine("--->" + childElement.Name);
foreach (var ds in childElement.Attributes())
{
Console.WriteLine(ds.Name + ": " + ds.Value);
}
foreach (var element in childElement.Elements())
{
Console.WriteLine("------->" + element.Name);
foreach (var ds in element.Attributes())
{
Console.WriteLine(ds.Name + ": " + ds.Value);
}
}
}
}
这使我能够获取每个节点、其属性名和值,因此我可以将这些数据保存到数据库中的相关字段中,但这似乎是一种冗长且不灵活的方式,例如,如果XML结构发生变化,所有这些foreach语句都需要重新检查,而且用这种方式过滤数据很困难,我需要编写某些if语句来过滤数据(例如仅获取West地区的员工等)。
我正在寻找一种更灵活的方法,使用linq,类似于这样:
List<Employees> employees =
(from employee in xml.Descendants("CompanyInfo")
select new employee
{
EmployeeName = employee.Element("employee").Value,
EmployeeDeptId = ?? get data,
RegionName = ?? get data,
AreaCode = ?? get data,,
}).ToList<Employee>();
但我不确定如何从子节点获取值并应用过滤器(仅获取特定员工)。这可行吗?任何帮助将不胜感激。
谢谢
class Employee
没有 (一个列表的) Regions 属性。 - H HList<string>
是不够的。 - H H