web-dev-qa-db-ja.com

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

問題:

この方法を実行すると、「CHILDREN Parent node」が欠落します。 foreachの前に追加すると、閉じたノードとしてレンダリングされます

<children/>

それは私たちが望むものではありません。

質問:

リストにある数の親ノードを最初の部分に追加するにはどうすればよいですか?

34
SF Developer

これを試して:

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