2011-12-19 5 views
27

は、それでは、これを想定してみましょう、実行時に子ノードを追加することは、私が達成したいものです。の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")); 

私はいくつかのデータに基づいて "子供"を追加する必要があります。
ので、私はすべての単一の子

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

PROBLEM得るために、私のリストを通して反復処理する必要が1,2,3,4 ...

があるかもしれません:

は、この方法でやって私は "子供の親ノード"を見逃しています。 私はforeachの前にそれを追加した場合、それが閉じられたノード

<children/> 

としてレンダリングされ、それは我々が望むものではありません。

QUESTION:

はどのようにして第一の部分に親ノードを追加することができますし、私のリストのように多くの人が持っていますか?

答えて

29

これを試してみてください:

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") 
         ) 
      ) 
     ); 
6
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")); 
} 
26
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); 
関連する問題