1

我有一个如下的xml文件。

文件名:myapp.config

<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 =”Enumeration 没有结果“”。

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

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

提前致谢

4

2 回答 2

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")
        };
于 2013-04-03T07:00:48.650 回答
1

xmlDoc.Root已经指向configuration元素,所以你不能查询.Descendants("configuration"),因为它不会返回任何元素。

您还应该将元素/属性名称更改为正确的名称 - 它们区分大小写。

(string)XElement并且(string)XAttribute也更好XElement.Value,因为即使没有找到元素/属性,它也能正常工作。在那种情况下会抛出with.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")

        };
于 2013-04-03T07:03:03.577 回答