XElement => Add children nodes at run time

57,856

Solution 1

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

Solution 2

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

Solution 3

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")); 
} 
Share:
57,856
SF Developer
Author by

SF Developer

Updated on December 12, 2020

Comments

  • SF Developer
    SF Developer over 3 years

    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?