0

首先,我只想以在此之前我从未使用过 XML 或 C# 作为开头,所以如果我的问题没有意义,我深表歉意。

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

该程序当前所做的是读取具有以下条目的文本文件:

员工ID-姓名-主管ID

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

上面的文本对应于 Employee-Supervisor 关系,例如,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# 程序,它知道这些关系?

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

谢谢!

4

1 回答 1

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);

对于您的示例数据,您将收到一名员工 (Jill) 和一名下属 (Joe),后者也将拥有另一名下属 (Bob)。

于 2013-02-27T22:25:39.837 回答