c#linq to xml更新特定值

时间:2016-04-27 21:04:21

标签: c# xml linq xattribute

我正在创建配置文件编辑器,目前正在实现更新现有数据的功能。我希望能够更新文件中具有特定属性的所有属性,例如更新用户名。

我的XML文件以下列方式表示用户:

<user user="user1" ... />
<user user="user2" ... />

我目前的尝试看起来像这样:

 xdoc.Descendants().Where(a => a.Attribute("user").Value == UserEditInput).FirstOrDefault().SetAttributeValue("user", NewUser);

其中UserEditInput是当前用户名的名称,NewUser是新的替换值。

这会抛出NullReferenceException。上面显示的表单中有许多“用户”XAttributes,其值等于UserEditInput的值。这使我相信我没有以正确的方式引用所需的数据,没有正确地修改属性,或者两者兼而有之。

提前感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

目前,您正在尝试获取文档中每个元素的user属性的值 - 例如,包括根元素。

这里有两个选项,我可能会同时使用它们:

  • 使用user
  • 指定您只需xdoc.Descendants("user")个元素
  • 使用XAttributestring代替Value属性;这样,如果没有这样的属性,演员也将返回null

此外,如果找不到匹配元素,则使用FirstOrDefault,因此您将获得null值 - 但您仍尝试设置属性值。不要那样做。

所以,把它们放在一起 - 并通过使用带谓词的FirstOrDefault的重载来缩短:

var element = xdoc.Descendants("user")
                  .FirstOrDefault(a => (string) a.Attribute("user") == UserEditInput);

if (element != null)
{
    element.SetAttributeValue("user", NewUser);
}
相关问题