2013-04-03 57 views
1

我有一個xml文件,如下所示。使用LINQ加載XML文件時出錯並在加載後更改XML文件

文件名:myapp.connfig

<configuration> 
    <appSettings> 
    <add key="Key1" value="false" /> 
    <add key="Key2" value="5893893"/> 
    <add key="key3" value="44123"/> 
    </appSettings> 
</configuration> 

我想這個XML文件加載到一個DataGridView。

我正在使用Linq到XML但無法加載它。

使用代碼如下

 var q = from c in xmlDoc.Root.Descendants("configuration").Elements("appSettings") 
       select new 
       { 
        myKey = c.Element("add").Attributes("key"), 
        myValue = c.Element("add").Attribute("Value").Value 

       }; 

dataGridView1.DataSource = q.ToList(); 

在查詢的結果集我收到消息作爲「空=‘枚舉沒有結果’」。

上面的LINQ語句出了什麼問題。

加載XML文件後,我想編輯這些值並保存回XML文件。我怎樣才能完成這項任務。

在此先感謝

回答

2

Xml區分大小寫,您應該使用屬性和元素的小寫名稱。你也有錯誤的元素選擇。 configuration是xml的根,並且您正在選擇單個的appSettings元素,而不是選擇裏面的所有add元素。下面是查詢應該如何看:

var q = from a in xmlDoc.Descendants("appSettings").Elements("add") 
     select new 
     { 
      myKey = (string)a.Attribute("key"), // also here use Attribute 
      myValue = (string)a.Attribute("value") 
     }; 
+1

謝謝..它的工作完美。 – usr021986

+0

問題的第二部分...我如何在數據網格視圖中編輯這些值並保存回xml文件? – usr021986

+0

@ user373083看看這個問題http://stackoverflow.com/questions/546229/how-to-change-in-runtime-application-settings –

1

xmlDoc.Root已指向configuration元素,所以你不能查詢.Descendants("configuration"),因爲它不會返回任何元素。

您還應該將您的元素/屬性名稱更改爲適當的名稱 - 它們區分大小寫。

(string)XElement(string)XAttribute也好於XElement.Value,因爲即使未找到元素/屬性,它也能正常工作。隨着.Value方法NullReferenceException將在這種情況下被拋出。

var q = from c in xmlDoc.Root.Elements("appSettings") 
     select new 
     { 
      myKey = (string)c.Element("add").Attribute("key"), 
      myValue = (string)c.Element("add").Attribute("value") 

     };