I am creating a configuration file editor, and am currently implementing features for updating existing data. I would like to be able to update all attributes within the file which have a specific attribute, such as updating a user name.
My XML file represents users in the following manner:
<user user="user1" ... />
<user user="user2" ... />
My present attempt looks like this:
xdoc.Descendants().Where(a => a.Attribute("user").Value == UserEditInput).FirstOrDefault().SetAttributeValue("user", NewUser);
where UserEditInput is the name of the current user name and NewUser is the new replacement value.
This throws a NullReferenceException. There are a number of "user" XAttributes in the form shown above with a value equal to that of UserEditInput. This leads me to believe I am not referencing the desired data in the correct manner, not modifying the attributes correctly, or both.
Thank you in advance for any assistance.

Currently you're trying to fetch the value for the user attribute of every element in the document - including the root element, for example.
Two options here, which I'd probably use both of:
user elements, using xdoc.Descendants("user")XAttribute to string instead of the Value property; that way if there's no such attribute, the cast will return null as wellAdditionally, if you don't find the matching element, you're using FirstOrDefault so you'll get a value of null - but you try to set the attribute value anyway. Don't do that.
So, putting it all together - and taking a short cut by using the overload of FirstOrDefault with a predicate:
var element = xdoc.Descendants("user")
.FirstOrDefault(a => (string) a.Attribute("user") == UserEditInput);
if (element != null)
{
element.SetAttributeValue("user", NewUser);
}
See more on this question at Stackoverflow