如何在C#中使用XML进行对象表示?

时间:2013-02-27 21:57:00

标签: c# xml xml-parsing xml-serialization

首先,我只想在此之前提到我之前从未使用过XML或C#,所以如果我的问题没有意义,我会道歉。

我的任务是修改现有的C#程序。

程序当前所做的是读取包含以下条目的文本文件:

员工ID - 姓名 - 主管ID

7;Jill;0
3;Joe;7
6;Bob;3

如果上述文本与Employee-Supervisor关系相对应,那么例如,Joe的员工ID为3,他向Jill报告。鲍勃的员工身份证是6,他向乔报告。

我用Java编写了一个程序,它接受上面的文本文件,然后把它们变成一个像这样的XML文件(按照上面的例子):

<Employees>
  <Employee_Name> Jill
           <Employee_Name>Joe 
                 <Employee_Name>Bob</Employee_Name>
           </Employee_Name>
   </Employee_Name>
</Employees>

我的问题如下:

如何使用这个XML层次结构并使其成为可用于我的C#程序的东西,它可以识别这些关系?

例如,其中一项功能是让程序自动向所有员工的主管以及由同一直接经理监督的任何人发送电子邮件。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用Linq to XML查询您的文档:

首先,您需要一个类来存储数据:

class Employee
{
    public string Name { get; set; }
    public List<Employee>  Subordinates { get; set; }

}

然后,您可以使用XElement.Parse()来解析xml字符串,或XElement.Load(filePath)从文件中加载它。

var xml = XElement.Parse("<Employees>  <Employee_Name> Jill           <Employee_Name>Joe                  <Employee_Name>Bob</Employee_Name>           </Employee_Name>   </Employee_Name></Employees>");

用于获取数据的递归算法:

static List<Employee> GetEmployees(XElement xml)
{
    return (from e in xml.Elements("Employee_Name")
            let name = e.Nodes().First().ToString()
            select new Employee { Name = name, Subordinates = GetEmployees(e) }).ToList();
}

可以在xml上调用:

var employees = GetEmployees(xml);

对于您的样本数据,您将收到一个Employee(Jill)和一个下属(Joe),它也会有另一个下属(Bob)。