2010-01-21 62 views
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); 

添加元素back块是问题。当它到达添加它指出:如何将XElement添加到文档,避免“结构错误的文档”错误?

此操作将创建一个 结构错误的文档。

我在做什么愚蠢的错误?

编辑:

是的,我正在读为XDocument,不XElement。任何关于什么时候支持这个或那个的建议?

+0

在一个侧面说明,你的'newElement'对象存储'Balance'节点Id'的'一个孩子。这与您预期的XML结构不符。 – 2010-01-21 17:43:36

+0

你是对的,但你可以忽略xml结构,我认为这是必需的,但我可以从字面上添加任何东西。 – Finglas 2010-01-21 17:45:24

回答

38

看起来您正在试图添加一个新元素作为文档根目录的子元素。如果是这样,那么您需要将您的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)

+0

更准确的说法是:if(document.Root.FirstNode!= null)document.Root.FirstNode.AddAfterSelf(newElement); else document.Root.AddFirst(newElement);' – 2013-04-10 20:59:14