<?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-данные, до сих пор я попытался это:Анализировать XML с помощью LINQ, чтобы получить дочерние элементы
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 для фильтрации данных (например, получить сотрудников только с запада и т. Д.)
Я искал более гибкий способ, с помощью 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>();
Но я не знаю, как я могу получить значения из дочерних узлов и применить фильтрацию (чтобы получить некоторые сотрудники). Это возможно? Любая помощь приветствуется.
Благодаря
Спасибо, исправлено. – 03Usr