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

El bloqueador de elemento agregar es el problema. Cuando llega al agregar, indica:¿Cómo agrego un elemento XElement a un documento, evitando el error de "documento estructurado incorrectamente"?

Esta operación crearía un documento incorrectamente estructurado.

¿Qué error estúpido estoy haciendo?

Editar:

Sí, estaba leyendo como un XDocument, no XElement. ¿Algún consejo sobre cuándo favorecer a uno u otro?

+0

En una nota, el objeto '' newElement' almacena el nodo Por balanza como un hijo de 'Id'. Esto no coincide con la estructura XML esperada. –

+0

Tienes razón, pero puedes ignorar la estructura xml, pensé que era necesaria pero literalmente puedo agregar cualquier cosa. – Finglas

Respuesta

38

Parece que está intentando agregar un elemento nuevo como elemento secundario de la raíz de su documento. Si es así, entonces necesita cambiar su declaración Add a lo siguiente.

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

Al agregar directamente al documento se agrega otro elemento raíz, que infringe la estructura XML.

8

Está tratando efectivamente de agregar un nuevo elemento raíz, que no les gusta a estos objetos. Supongo que document es un XDocument? Colóquelo más dentro del nodo raíz, agregándolo al nodo raíz. Uso:

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

+0

Aún más correctamente: 'if (document.Root.FirstNode! = Null) document.Root.FirstNode.AddAfterSelf (newElement); else document.Root.AddFirst (newElement); ' –

Cuestiones relacionadas