如何在LINQ中添加一个元素作为第n个子元素
本文关键字:元素 一个 LINQ 添加 | 更新日期: 2023-09-27 18:13:57
我想完成下面的XML,以便所有父元素都有所有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()。(因为我不知道存在什么子元素,所以在self之后或之前使用add都很难。)
是否有一种方法可以在某个位置添加子节点?
XmlElement有两种方法来添加智利:Append和Prepend,添加到子列表开始的末尾。你不能在中间加。
如果你真的想这样做,你可以删除所有的子元素(RemoveAll,但这也会删除属性,你在这个例子中没有),然后按你想要的顺序添加(AppendChild)。
试试这个:
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;
}
}