我有一个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文件。我怎样才能完成这项任务。
先谢谢
答案 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")
};