37 Stimmen

XElement => Kinderknoten zur Laufzeit hinzufügen

Nehmen wir also an, dass dies das ist, was ich erreichen möchte:

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

Nicht sicher, ob die Verwendung von XElement der einfachste Weg ist
aber das ist, was ich bisher habe:

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

Jetzt muss ich die "Kinder" auf der Grundlage einiger Daten, die ich habe, hinzufügen.
Es könnten 1,2,3,4 ... sein.

Ich muss also meine Liste durchgehen, um jedes einzelne Kind zu erhalten.

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

PROBLEM:

Wenn ich dies tue, fehlt der Knoten "CHILDREN Parent". Wenn ich es einfach vor der foreach hinzufügen, wird es als ein geschlossener Knoten gerendert werden

<children/>

und das ist NICHT das, was wir wollen.

QUESTION:

Wie kann ich dem 1. Teil einen übergeordneten Knoten und so viele, wie meine Liste hat, hinzufügen?

40voto

dtb Punkte 205441

Versuchen Sie dies:

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

34voto

Barka Punkte 8474
 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);

12voto

Muhammad Hasan Khan Punkte 33714
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")); 
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X