使用Linq在XML中设置元素属性值

时间:2013-08-19 10:56:35

标签: c# xml linq

我有以下XML:

<appsettings>

    <add key="MDXQueryDirectory" value="" />

    <add key="URLPrefix" value="/Manager" />

</appsettings>

和代码:

 XElement doc = XElement.Load(@"config_path");


 var element = doc.Elements("add")
            .SingleOrDefault(x => x.Attribute("key").Value == "MDXQueryDirectory");


 element.SetAttributeValue("value", txtMDXQueryDirectory.Text);

我想将txtMDXQueryDirectory文本框数据分配给MDXQueryDirectory appSsetting。首先我使用Single方法,但它不起作用,我在谷歌上研究了我发现这个page所以错误解决了相关的文章。但是知道SingleOrDefault方法不起作用。它抛出NullPointerException (Object reference not set to an instance an object)

如何解决问题,或者您可以建议在xml中设置值数据的不同习惯用法?

2 个答案:

答案 0 :(得分:4)

您需要更改要选择要更新的元素的查询,它应该是:

 XDocument doc = XDocument.Load(@"config_path");

 var element = doc.Descendants().Elements("add")
               .SingleOrDefault(x => x.Attribute("key").Value == "MDXQueryDirectory");

 element.SetAttributeValue("value", txtMDXQueryDirectory.Text);

 doc.Save(@"config_path");

获取文件时,您还应该使用XDocument而不是XElement

注意: XDocument.Load(@"config_path") - 应指向XML文件的位置。目前它没有。

答案 1 :(得分:0)

 string config_file = @"config_file_path";

 var element = doc.Element("appSettings").Elements("add")
                           .SingleOrDefault(x => x.Attribute("key").Value.ToString() == "MDXQueryDirectory");

 element.SetAttributeValue("value", txtMDXQueryDirectory.Text);
 doc.Save(@"config_file_path");

此代码块工作正常。我认为这个问题与我身边的xml节点有关。感谢所有回复。