c# linq to xml 更新特定值的所有后代
c# linq to xml update all descendants of specific value
我正在创建配置文件编辑器,目前正在实施更新现有数据的功能。我希望能够更新文件中具有特定属性的所有属性,例如更新用户名。
我的 XML 文件以下列方式表示用户:
<user user="user1" ... />
<user user="user2" ... />
我现在的尝试是这样的:
xdoc.Descendants().Where(a => a.Attribute("user").Value == UserEditInput).FirstOrDefault().SetAttributeValue("user", NewUser);
其中 UserEditInput
是当前用户名的名称,NewUser
是新的替换值。
这会引发 NullReferenceException
。上面显示的表单中有许多 "user" 个 XAttributes,其值等于 UserEditInput
的值。这让我相信我没有以正确的方式引用所需的数据,没有正确修改属性,或两者兼而有之。
提前感谢您的帮助。
目前您正在尝试获取文档中 每个 元素的 user
属性的值 - 例如,包括根元素。
这里有两个选项,我可能会同时使用:
- 指定您只需要
user
个元素,使用 xdoc.Descendants("user")
- 使用
XAttribute
到 string
的转换而不是 Value
属性;这样,如果没有这样的属性,演员表也会 return null
此外,如果您没有找到匹配的元素,那么您使用的是 FirstOrDefault
,因此您将获得一个空值 - 但您仍然会尝试设置该属性值。不要那样做。
因此,将它们放在一起 - 并通过使用带有谓词的 FirstOrDefault
的重载来走捷径:
var element = xdoc.Descendants("user")
.FirstOrDefault(a => (string) a.Attribute("user") == UserEditInput);
if (element != null)
{
element.SetAttributeValue("user", NewUser);
}
我正在创建配置文件编辑器,目前正在实施更新现有数据的功能。我希望能够更新文件中具有特定属性的所有属性,例如更新用户名。
我的 XML 文件以下列方式表示用户:
<user user="user1" ... />
<user user="user2" ... />
我现在的尝试是这样的:
xdoc.Descendants().Where(a => a.Attribute("user").Value == UserEditInput).FirstOrDefault().SetAttributeValue("user", NewUser);
其中 UserEditInput
是当前用户名的名称,NewUser
是新的替换值。
这会引发 NullReferenceException
。上面显示的表单中有许多 "user" 个 XAttributes,其值等于 UserEditInput
的值。这让我相信我没有以正确的方式引用所需的数据,没有正确修改属性,或两者兼而有之。
提前感谢您的帮助。
目前您正在尝试获取文档中 每个 元素的 user
属性的值 - 例如,包括根元素。
这里有两个选项,我可能会同时使用:
- 指定您只需要
user
个元素,使用xdoc.Descendants("user")
- 使用
XAttribute
到string
的转换而不是Value
属性;这样,如果没有这样的属性,演员表也会 returnnull
此外,如果您没有找到匹配的元素,那么您使用的是 FirstOrDefault
,因此您将获得一个空值 - 但您仍然会尝试设置该属性值。不要那样做。
因此,将它们放在一起 - 并通过使用带有谓词的 FirstOrDefault
的重载来走捷径:
var element = xdoc.Descendants("user")
.FirstOrDefault(a => (string) a.Attribute("user") == UserEditInput);
if (element != null)
{
element.SetAttributeValue("user", NewUser);
}