XElement => 在运行时添加子节点

37

所以假设这就是我想要实现的内容:

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

问题:

如果使用这种方式,我将会丢失“父节点的子元素”。 如果在foreach之前添加它,它将呈现为一个闭合节点。

<children/>

而这并不是我们想要的。

问题:

我该如何在第一部分中添加一个父节点和与列表长度相同的多个子节点?

3个回答

40

试试这个:

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接