2013-08-19 274 views
0

我有下面的XML:集元素XML属性值的LINQ

<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中设置数值数据?

+0

“doc”或“doc.Elements(”add“)”或“x.Attribute(”key“)”对象是否为空?你检查过了吗? –

+0

大的可能性Lİnq查询没有找到正确的xml节点。以下代码示例提供了您的问题答案。但代码仍然无法正常工作。 –

+0

请检查我提到的所有3件事情,看看究竟是什么原因造成的异常。到目前为止,您没有任何安全检查。 –

回答

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文件的位置。目前它不。

+0

它不工作在我身边仍然我得到“System.NullReferenceException:对象引用未设置为对象的实例。” –

+0

今年秋天会发生什么?如果你的XML与你的OP中发布的相同,那么这个错误是在你的代码中的其他地方,因为我已经在本地进行了测试,并且没问题。 – DGibbs

+0

这里不需要XDocument。很少有。 –

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节点有关。感谢所有回复。

相关问题