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

Il blocco posteriore di elemento aggiuntivo è il problema. Come quando si arriva all'aggiunta:Come si aggiunge un XElement a un documento, evitando l'errore "documento strutturato in modo errato"?

Questa operazione creerebbe un documento strutturato in modo errato .

Che stupido errore sto facendo?

Edit:

Sì, stavo leggendo come XDocument, non XElement. Qualche consiglio su quando preferire uno o l'altro?

+0

Una nota a parte, il vostro 'oggetto newElement' memorizza il nodo' Balance' come figlio di 'Id'. Questo non corrisponde alla struttura XML prevista. –

+0

Hai ragione, ma puoi ignorare la struttura xml, ho pensato che fosse necessario ma posso letteralmente aggiungere qualcosa. – Finglas

risposta

38

Sembra che si stia tentando di aggiungere un nuovo elemento come figlio della radice del documento. In tal caso, è necessario modificare l'istruzione Add alla seguente.

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

L'aggiunta diretta al documento aggiunge un altro elemento radice, che viola la struttura XML.

8

Si sta effettivamente tentando di aggiungere un nuovo elemento radice, che a questi oggetti non piace. Presumo che document sia un XDocument? Posizionarlo ulteriormente all'interno del nodo root, aggiungendolo al nodo root. Usa:

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

+0

Ancora più correttamente: 'if (document.Root.FirstNode! = Null) document.Root.FirstNode.AddAfterSelf (newElement); else document.Root.AddFirst (newElement); ' –

Problemi correlati