Подтвердить что ты не робот

XElement => Добавить дочерние узлы во время выполнения

Итак, допустим, это то, чего я хочу достичь:

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

Не уверен, что использование XElement является самым простым способом
но это то, что у меня есть до сих пор:

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

Теперь я должен добавить "детей" на основе некоторых данных, которые у меня есть.
Может быть 1,2,3,4...

поэтому мне нужно выполнить итерацию по моему списку, чтобы получить каждый отдельный

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

Проблема:

Проделав этот путь, я пропущу "родитель детей node". Если я просто добавлю его перед foreach, он будет отображаться как закрытый node

<children/>

и это НЕ то, что мы хотим.

Вопрос:

Как я могу добавить к первой части родительский node и сколько у меня список?

4b9b3361

Ответ 1

Попробуйте следующее:

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

Ответ 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);

Ответ 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")); 
}