【发布时间】:2018-09-08 08:57:09
【问题描述】:
假设我要解析以下 XML 文件:
<EmployeeDetails>
<Employee> //List of Employees
<Id>11</Id>
<name>a</name>
<Dependents> //List of Dependents of a single employee
<Dependent>
<name>a1</name>
<age>50</age>
</Dependent>
<Dependent>
<name>a2</name>
<age>52</age>
</Dependent>
</Dependents>
<Department> //Unique per Emp
<DeptId>1</DeptId>
<DeptName>D1</DeptName>
</Department>
</Employee>
<Employee>
-----
--------
</Employee>
</EmployeeDetails>
以下是上述文件的类结构:
public class Employee
{
public int id {get; set;}
public string name {get; set;}
public List<Dependents> Dependents {get; set;}
public Department Department {get; set;}
}
public class Dependents
{
public string name {get; set;}
public int age {get; set;}
}
public class Department
{
public int DeptId {get; set;}
public string DeptName {get; set;}
}
现在,我想解析上面的 XML 结构,我可以为 Employee 的 id 和 name 解析,但我无法进一步解析。
让我告诉你我到目前为止做了什么:
public static void ParseXml()
{
string xmldoc = //let's assume I've data in this string
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(xmldoc);
var query = from d in xdoc.Root.Descendants("Employee")
select d;
List<Employee> lsEmp = new List<Employee>();
foreach (var q in query)
{
Employee obj = new Employee();
obj.Id = Convert.ToInt32(q.Element("Id").Value);
obj.name = q.Element("name").Value;
obj.Department = new Department();
obj.Dependents = new List<Dependents>();
// how to get data further?
lsEmp.Add(obj);
}
所以我需要帮助才能从 Dependents 和 Department 对象的这些列表中解析 XML 数据。
【问题讨论】:
-
如果你写了这段代码,如果我理解你的问题,你已经知道如何钻取节点:
q.Element("Id")&q.Element("name"),那么问题是什么? -
您考虑过使用 XmlSerializer 吗?如果类定义正确,它将一口气读完。
-
@AndrewTruckle 我知道使用 XMLSerializer 很容易,但我不会使用 LINQ-TO-XML 来实现这一点
标签: c# xml xml-parsing linq-to-xml