如何将一个元素作为n子元素添加到LINQ中的元素

时间:2011-11-10 10:31:55

标签: c# xml linq

我想完成下面的XML,所以所有Parent元素都包含所有3个子元素。

<Parent>
  <Child1></Child1>
  <Child2></Child2>
  <Child3></Child3>
</Parent>
<Parent>
  <Child3></Child3>
</Parent>
<Parent>
  <Child1></Child1>
  <Child3></Child3>
</Parent>

所以我得到了以下代码

var elementsToChange = inputDoc.Descendants(CommonConstant.Parent);
foreach (var element in elementsToChange)
{
   if (element.Element(CommonConstant.Child1) == null) 
   { 
     //add child1 at 1
   }      
   if (element.Element(CommonConstant.Child2) == null) 
   { 
     //add child2 at 2
   }       
}

但我无法在元素上找到Insert()或AddAT()。 (因为我不知道孩子们存在什么,使用add afetr或者在自我之前很难使用。)

有没有办法在某个地方添加孩子?

2 个答案:

答案 0 :(得分:2)

XmlElement有两种添加智能的方法:Append和Prepend,添加到子列表开头的末尾。你不能添加到中间。

如果你真的想要这样,你可以删除所有孩子(RemoveAll,但这也会删除你在本例中没有的属性),然后按你想要的顺序添加(AppendChild)。

答案 1 :(得分:1)

试试这个:

foreach (var element in elementsToChange)
{
  XElement lastChild = null;
  foreach(var childName in Enumerable.Range(1, 3).Select(x => "Child" + x))
  {
    var child = element.Element(childName);
    if(child == null)
    {
      child = new XElement(childName);
      if(lastChild == null)
        element.AddFirst(child);
      else
      {
        lastChild.AddAfterSelf(child);
      }
    }
    lastChild = child;
  }
}