2010-01-21 55 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