web-dev-qa-db-fra.com

XElement => Ajouter des nœuds enfants au moment de l'exécution

Supposons donc que c'est ce que je veux réaliser:

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

Je ne sais pas si l'utilisation de XElement est le moyen le plus simple
mais voici ce que j'ai jusqu'à présent:

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

Maintenant, je dois ajouter les "enfants" sur la base de certaines données dont je dispose.
Il pourrait y avoir 1,2,3,4 ...

donc je dois parcourir ma liste pour obtenir chaque enfant

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

PROBLÈME:

En procédant de cette façon, il me manquera le "nœud parent ENFANTS". Si je l'ajoute juste avant le foreach, il sera rendu comme un nœud fermé

<children/>

et ce n'est pas ce que nous voulons.

QUESTION:

Comment puis-je ajouter à la 1ère partie un nœud parent et autant que ma liste a?

34
SF Developer

Essaye ça:

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")
                        )
             )
        );
34
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);
29
Barka
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")); 
} 
10
Muhammad Hasan Khan