2010-05-27 85 views
1

鑑於一些樣本XML,如:C#XML序列化只連載單元素列表

<XML> 
    <EMPLOYEES>  
    <EMPLOYEE isBestEmployee="false">John"<"/EMPLOYEE> 
    <EMPLOYEE isBestEmployee="true">Joe"<"/EMPLOYEE> 
    <EMPLOYEE isBestEmployee="false">Bill"<"/EMPLOYEE> 
    </EMPLOYEES> 
</XML> 

我如何連載只是isBestEmployee="true"員工到一個Employee對象?

+0

如果您發佈的代碼或XML,** **請在高亮文本編輯器的線和編輯器工具欄上的「代碼」按鈕(101 010)點擊很好的格式和語法高亮顯示! – 2010-05-27 21:16:34

+0

你有沒有成功解決這個問題?你還需要幫助嗎? – jcolebrand 2010-12-14 03:56:17

回答

1

我對這個問題的兩個答案,這裏的第二個答案:

鑑於任何列表,你怎麼了找到具體的價值?

你只需要解析列表。


現在,我會假設你不知道該怎麼做:

[XmlType("EMPLOYEES"), Serializable] 
public class Employees { 
    public Employee[] employee {get; set;} 
} 
[XmlType("EMPLOYEE")] 
public class Employee { 
    [XmlAttribute("isBestEmployee")] 
    public bool bestEmployee {get; set;} 
    [XmlText] 
    public string name; 
} 

你應該反序列化這個(可能與XmlSerializer),然後您可以解析使用foreach (Employee in Employees)或數組LINQ查詢或許多其他方式。

這是回答這個問題嗎?

+0

謝謝。您的第二個解決方案仍然要求我將所有數據串入列表中,然後提取「最佳僱員」。有沒有辦法使用XPath來序列化對象? – guazz 2010-05-27 21:42:39

+0

@guazz - 嘗試閱讀第一個解決方案鏈接。第二個是關於如何聲明這些類。 – jcolebrand 2010-05-27 21:46:46

0

你是指這樣的事情(也許有linq做繁重的工作)?

XDocument loaded = XDocument.Load(@"C:\YourXmlFile.xml"); //or xml in memory 

     // Query the data and create the employee objects 
     var q = from c in loaded.Descendants("EMPLOYEE") 
       where (bool)c.Attribute("isBestEmployee") == true //"true" 
       select new Employee() { Name = c.Value, isBestEmployee = (bool)c.Attribute("isBestEmployee") }; 


     //print out the list of employees if you want. 
     foreach (Employee e in q) 
     { 
      Console.WriteLine("Employee name = {0}, isBestEmployee = {1}", e.Name, e.isBestEmployee); 
     } 
+0

XPath仍然是更少的代碼...... – jcolebrand 2010-05-27 22:38:05

+1

確實,這個例子的代碼很少,但像@guazz說他仍然需要循環創建員工。用你的例子,他必須創建一個somekind的列表/集合,並在循環中添加新的員工,以便他最終可以完成對真實對象的任何操作...然後它不會是更少的代碼。無論哪種方式都不需要太多的工作......只是提供選項。 – AGoodDisplayName 2010-05-27 22:49:56

+0

〜好點。我撓頭的是業務邏輯是什麼樣子的:「除了知道誰是最好的員工之外,我永遠不需要僱員信息。」以及爲什麼給這個數據集的仿函數不能限制到原始的業務邏輯。有數據提供的原因。因此我提供了兩個解決方案一個做他所要求的(我認爲他沒有閱讀,因爲他仍然問xpaths),一個做顯示的數據顯示以後可能。 IDK,沒有要求,是嗎? – jcolebrand 2010-05-27 23:31:50