2010-10-28 77 views
2

嗨 我想讀取一個XML文檔,但它可能會缺少一些節點,如果需要,我想爲缺失的節點使用默認值。Linq讀取缺少節點的XML文檔

XDocument xmlDoc = XDocument.Load(Path.Combine(Application.StartupPath, "queues.xml")); 
     var q = from c in xmlDoc.Root.Descendants("Queue") 
       select new Queue 
       { 
        Alert1 =c.Element("Alert1").Value, 
        Alert2 = c.Element("Alert2").Value, 
        Alert3 =c.Element("Alert3").Value 
       }; 

     var queryAsList = new BindingList<Queue>(q.ToList()); 


    class Queue 
{ 
    public string Alert1 { get; set; } 
    public string Alert2 { get; set; } 
    public string Alert3 { get; set; } 
} 

所以在上面只有alert1可能存在或所有的警報或沒有警報!我需要爲任何不存在的節點使用默認值!我認爲我可以Alert3 = c.Element(「Alert3」)。Value.DefaultEmpty(「abc」)但這不起作用!

回答

2
XDocument xmlDoc = XDocument.Load(Path.Combine(Application.StartupPath, "queues.xml")); 
var q = from c in xmlDoc.Root.Descendants("Queue") 
     select new Queue 
     { 
      Alert1 = (string)c.Element("Alert1") ?? "default 1", 
      Alert2 = (string)c.Element("Alert2") ?? "default 2", 
      Alert3 = (string)c.Element("Alert3") ?? "default 3" 
     }; 

它是固定的。這也適用於像(int?),(DateTime?)這樣的東西,通過在節點上定義的一系列轉換運算符,因此更容易編寫更安全的重新丟失的數據。

+0

在聲音聽起來不錯之前,我從來沒有聽說過一個空合併算子,並且是一種享受!謝謝 – Adrian 2010-10-28 08:54:04