0

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

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

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

我目前的尝试如下所示:

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

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

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

提前感谢您的任何帮助。

4

1 回答 1

1

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

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

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

此外,如果您没有找到匹配的元素,FirstOrDefault那么您将获得 null 值 - 但无论如何您都尝试设置属性值。不要那样做。

FirstOrDefault因此,将它们放在一起 - 并通过使用谓词的重载来走捷径:

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

if (element != null)
{
    element.SetAttributeValue("user", NewUser);
}
于 2016-04-27T21:11:20.570 回答