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

Posted

技术标签:

【中文标题】XElement => 在运行时添加子节点【英文标题】:XElement => Add children nodes at run time 【发布时间】:2012-01-23 10:21:39 【问题描述】:

所以让我们假设这是我想要实现的目标:

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

这不是我们想要的。

问题:

如何在第一部分添加一个父节点以及我的列表中的多少?

【问题讨论】:

【参考方案1】:

试试这个:

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

【讨论】:

【参考方案2】:
 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);

【讨论】:

【参考方案3】:
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")); 
 

【讨论】:

以上是关于XElement => 在运行时添加子节点的主要内容,如果未能解决你的问题,请参考以下文章

属性名称在Xelement的setattribute属性中重叠

对 XElement 的子节点的索引访问

如何将子元素作为解码字符串添加到 XElement?

根据特定条件添加Xelement c#

XElement 的子级

XElement - 无法捕获下一个节点