我正在创建配置文件编辑器,目前正在实现更新现有数据的功能。我希望能够更新文件中具有特定属性的所有属性,例如更新用户名。
我的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
的值。这使我相信我没有以正确的方式引用所需的数据,没有正确地修改属性,或者两者兼而有之。
提前感谢你的帮助。
答案 0 :(得分:1)
目前,您正在尝试获取文档中每个元素的user
属性的值 - 例如,包括根元素。
这里有两个选项,我可能会同时使用它们:
user
xdoc.Descendants("user")
个元素
XAttribute
到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);
}