Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XElement => Add children nodes at run time

So let's assume this is what i want to achieve:

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

Not sure if using XElement is the simplest way
but this is what I have so far:

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

Now I have to add the "children" based on some data i have.
There could be 1,2,3,4 ...

so I need to iterate thru my list to get every single child

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

PROBLEM:

Doing this way I will be missing the "CHILDREN Parent node". If I just add it before the foreach, it will be rendered as a closed node

<children/> 

and that's NOT what we want.

QUESTION:

How can I add to the 1st part a parent node and as many as my list has?

like image 647
SF Developer Avatar asked Dec 19 '11 08:12

SF Developer


2 Answers

Try this:

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")                         )              )         ); 
like image 169
dtb Avatar answered Sep 17 '22 22:09

dtb


 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); 
like image 44
Barka Avatar answered Sep 20 '22 22:09

Barka