如何将XElement添加到文档中,避免出现“文档结构不正确”的错误?

21
        // 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);

add元素回退块是问题所在。当它到达添加时,它会声明:

此操作将创建结构不正确的文档。

我犯了什么愚蠢的错误?

编辑:

是的,我正在阅读XDocument而不是XElement。何时使用其中之一有什么建议吗?


顺便提一下,你的 newElement 对象将 Balance 节点作为 Id 的子节点存储。这与你期望的 XML 结构不符。 - Steve Guidi
你说得对,但是你可以忽略XML结构,我以为它是必需的,但实际上我可以添加任何内容。 - Finglas
2个回答

40

看起来你正在尝试将一个新元素作为文档根的子元素添加。如果是这样,那么你需要将你的Add语句更改为以下内容:

var newElement = new XElement("Id", "0", new XElement("Balanace", "3000"));
document.Root.Add(newElement);

直接添加到文档中会添加另一个根元素,违反了XML结构。


8

你实际上是在尝试添加一个新的根元素,而这些对象不喜欢这样做。 我猜 document 是一个 XDocument? 将它进一步放入根节点中,通过将其添加到根节点中。 使用:

document.Root.Add(newElement)document.FirstNode.Add(newElement)


更加准确的写法是:if (document.Root.FirstNode != null) document.Root.FirstNode.AddAfterSelf(newElement); else document.Root.AddFirst(newElement); - Csaba Toth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接