问题
// Remove element with ID of 1
var userIds = from user in document.Descendants("Id")
where user.Value == "1"
select user;
userIds.Remove();
SaveAndDisplay(document);
// Add element back
var newElement = new XElement("Id", "0",
new XElement("Balance", "3000"));
document.Add(newElement);
SaveAndDisplay(document);
The add element back block is the problem. As when it gets to the add it states:
This operation would create an incorrectly structured document.
What stupid mistake am I making?
Edit:
Yes, I was reading as an XDocument
, not XElement
. Any advice on when to favour one or the other?
回答1:
It looks like you are trying to add a new element as a child of your document's root. If so, then you need to change your Add
statement to the following.
var newElement = new XElement("Id", "0", new XElement("Balanace", "3000"));
document.Root.Add(newElement);
Adding directly to the document adds another root element, which violates the XML structure.
回答2:
You're effectively trying to add a new root element, which these objects don't like. I assume document
is an XDocument? Place it further inside the root node, by adding it to the root node. Use:
document.Root.Add(newElement)
or
document.FirstNode.Add(newElement)
来源:https://stackoverflow.com/questions/2111424/how-do-i-add-an-xelement-to-a-document-avoiding-the-incorrectly-structured-doc