2011-12-19 4 views
27

Así que vamos a suponer que esto es lo que quiero lograr:XElement => Añadir nodos hijos en tiempo de ejecución

<root> 
    <name>AAAA</name> 
    <last>BBBB</last> 
    <children> 
    <child> 
     <name>XXX</name> 
     <last>TTT</last> 
    </child> 
    <child> 
     <name>OOO</name> 
     <last>PPP</last> 
    </child> 
    </children> 
</root> 

No estoy seguro si el uso de XElement es la forma más sencilla
pero esto es lo que tengo hasta ahora:

XElement x = new XElement("root", 
        new XElement("name", "AAA"), 
        new XElement("last", "BBB")); 

Ahora tengo que agregar los "niños" en función de algunos datos que tengo.
Podría haber 1,2,3,4 ...

así que necesitamos iterar a través de mi lista para obtener todos los niños

foreach (Children c in family) 
{ 
    x.Add(new XElement("child", 
       new XElement("name", "XXX"), 
       new XElement("last", "TTT")); 
} 

PROBLEMA:

Haciendo de esta manera Me faltará el "nodo padre de NIÑOS". Si tan sólo añadir que antes de la foreach, que será mostrado como un nodo cerrado

<children/> 

y eso no es lo que queremos.

PREGUNTA:

¿Cómo puedo agregar a la primera parte de un nodo padre y todos los que tiene mi lista?

Respuesta

29

Prueba esto:

var x = new XElement("root", 
      new XElement("name", "AAA"), 
      new XElement("last", "BBB"), 
      new XElement("children", 
       from c in family 
       select new XElement("child", 
          new XElement("name", "XXX"), 
          new XElement("last", "TTT") 
         ) 
      ) 
     ); 
6
var children = new XElement("children"); 
XElement x = new XElement("root", 
        new XElement("name", "AAA"), 
        new XElement("last", "BBB"), 
        children); 

foreach (Children c in family) 
{ 
    children.Add(new XElement("child", 
       new XElement("name", "XXX"), 
       new XElement("last", "TTT")); 
} 
26
XElement root = new XElement("root", 
        new XElement("name", "AAA"), 
        new XElement("last", "BBB")); 

XElement children = new XElement("children"); 

foreach (Children c in family) 
{ 
    children.Add(new XElement("child", 
       new XElement("name", c.Name), 
       new XElement("last", c.Last)); 
} 
root.Add(children); 
Cuestiones relacionadas