que pertenece otro nodo modificar leer insertar especifico escribir eliminar elemento documento desea contexto atributos agregar c# xml linq-to-xml xelement

c# - pertenece - XElement=> Agregar nodos secundarios en tiempo de ejecución



modificar elemento xml c# (3)

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") ) ) );

Asumamos que esto es lo que quiero lograr:

<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 de si usar 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 ...

entonces necesito iterar a través de mi lista para obtener cada niño

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

PROBLEMA:

Haciendo esto, me faltará el "nodo padre de NIÑOS". Si solo lo agrego antes del foreach, se representará como un nodo cerrado

<children/>

y eso NO es lo que queremos

PREGUNTA:

¿Cómo puedo agregar a la primera parte un nodo padre y tantos como mi lista?


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")); }


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);