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

Khối phần tử thêm lại là vấn đề. Như khi nó được thêm vào nó nói:Làm cách nào để thêm XElement vào tài liệu, tránh lỗi "tài liệu có cấu trúc không chính xác"?

Thao tác này sẽ tạo ra một tài liệu có cấu trúc không chính xác .

Tôi đang mắc phải lỗi lầm nào?

Edit:

Vâng, tôi đã được đọc như một XDocument, không XElement. Bất cứ lời khuyên nào khi ủng hộ cái này hay cái kia?

+0

Trên một mặt lưu ý, 'đối tượng newElement' bạn lưu trữ các 'Balance' nút như một đứa trẻ của' Id'. Điều này không phù hợp với cấu trúc XML dự kiến ​​của bạn. –

+0

Bạn nói đúng, nhưng bạn có thể bỏ qua cấu trúc xml, tôi nghĩ nó là bắt buộc nhưng tôi có thể thêm bất cứ thứ gì. – Finglas

Trả lời

38

Dường như bạn đang cố gắng thêm phần tử mới làm phần tử con của gốc tài liệu. Nếu vậy, bạn cần phải thay đổi câu lệnh Add của mình thành câu lệnh sau.

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

Thêm trực tiếp vào tài liệu sẽ thêm phần tử gốc khác vi phạm cấu trúc XML.

8

Bạn đang cố gắng thêm một phần tử gốc mới mà các đối tượng này không thích. Tôi giả sử document là một XDocument? Đặt nó tiếp tục bên trong nút gốc, bằng cách thêm nó vào nút gốc. Sử dụng:

document.Root.Add(newElement) hoặc document.FirstNode.Add(newElement)

+0

Thậm chí chính xác hơn: 'if (document.Root.FirstNode! = Null) document.Root.FirstNode.AddAfterSelf (newElement); else document.Root.AddFirst (newElement); ' –

Các vấn đề liên quan