我想完成下面的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或者在自我之前很难使用。)
有没有办法在某个地方添加孩子?
答案 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;
}
}