2011-12-19 3 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")); 

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

так что мне нужно перебирать через мой список, чтобы каждый один ребенок

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

ПРОБЛЕМА:

Doing этот путь Я буду пропускать «родительский узел детей». Если бы я просто добавить его перед Еогеаспом, она будет оказана в виде закрытого узла

<children/> 

и это не то, что мы хотим.

ВОПРОС:

Как я могу добавить к 1-й части родительского узла и столько, сколько мой список имеет?

ответ

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); 
Смежные вопросы