2013-02-27 23 views
0

首先,我只想簡單介紹一下,我之前從未使用XML或C#,所以如果我的問題沒有意義,我很抱歉。如何在C#中使用XML進行對象表示?

我的任務是修改現有的C#程序。

什麼計劃目前所做的就是在具有條目,如文本文件讀取:

員工ID,名稱,主管ID

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

如果上面的文本對應於員工 - 主管關係,例如,喬的員工ID是3,他向吉爾報告。 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#程序,並知道它們之間的關係?

例如,其中一個功能是讓程序自動發送一封電子郵件給所有員工的主管以及由同一個直接經理監督的任何人。

謝謝!

+1

@MStodd它如何完全不是XML? – Andrey 2013-02-27 21:59:51

+0

將文本和標籤嵌入在一起。它不是有效的XML。 – 2013-02-27 22:00:37

+0

XML節點可以包含值或元素,但不能同時包含這兩個值。 – 2013-02-27 22:01:20

回答

0

您可以使用LINQ到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); 

爲了您的樣本數據,你會收到一個員工(吉爾)與一個下屬(Joe),也會有另一個下屬(Bob)。

+0

嗨, 謝謝。我正在研究這個。 – user2019260 2013-02-27 22:43:25

+0

嗨,我有一個問題。此行: 選擇新員工{名稱=姓名,下屬= GetEmployees(e)})。ToList(); 這就是說在當前上下文中不存在GetEmployees。 – user2019260 2013-02-27 23:12:17

相關問題