如何在c#中使用XML来表示对象

本文关键字:XML 表示 对象 | 更新日期: 2023-09-27 18:01:23

首先,我想先说明一下,在此之前我从未使用过XML或c#,所以如果我的问题没有意义,我很抱歉。

我的任务是修改一个现有的c#程序。

程序当前所做的是读入一个文本文件,其中包含如下条目:

员工ID- name -主管ID

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

上面的文本对应于员工-主管关系,例如,Joe的员工ID是3,他向Jill报告。Bob的员工ID是6,他向Joe报告。

我用Java写了一个程序,它接受上述文本文件并将它们转换为XML文件,如下所示(遵循上面的示例):

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

我的问题如下:

我怎么能把这个XML层次结构,并使它对我的c#程序有用,在那里它知道的关系?

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

谢谢!

如何在c#中使用XML来表示对象

你可以使用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)。