使用LINQ&amp ;;加载XML文件时出错加载后更改XML文件

时间:2013-04-03 06:59:26

标签: xml linq c#-4.0 linq-to-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 to 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();

在查询的结果集中,我收到消息为“Empty =”枚举没有产生结果“”。

上面的LINQ语句出了什么问题。

此外,在加载XML文件后,我想编辑这些值并保存回XML文件。我怎样才能完成这项任务。

先谢谢

2 个答案:

答案 0 :(得分: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 :(得分: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")

        };