在特定的XML节点C#之后添加同级

时间:2018-08-24 11:25:23

标签: c# xml visual-studio c#-4.0 xmldocument

我的xml文档如下:

<root>
<parent1>
    <element1>
    </element1>
</parent1>
<parent1>
    <element1>
    </element1>
</parent1>
<parent1>
    <element1>
    </element1>
</parent1>
<parent2>
    <element1>
    </element1>
</parent2>
<parent2>
    <element1>
    </element1>
</parent2>
<parent3>
    <element2>
    </element2>
</parent3>
</root>

我想在第一个parent2节点之前的最后一个parent1节点之后添加一个新的parent1节点。

赞:

<root>
    <parent1>
        <element1>
        </element1>
    </parent1>
    <parent1>
        <element1>
        </element1>
    </parent1>
    <parent1>
        <element1>
        </element1>
    </parent1>
    <parent1>
        <element1>
        </element1>
    </parent1>
    <parent2>
        <element1>
        </element1>
    </parent2>
    <parent2>
        <element1>
        </element1>
    </parent2>
    <parent3>
        <element2>
        </element2>
    </parent3>
</root>

我尝试使用XmlDocument SelectSingleNode和AppendChild方法,但它仅在最后一个parent3节点之后添加新的孩子。

编辑:

我尝试了以下代码:

string newNode = "<parent1/><element1>1</element1></parent1/>";

XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment();
xmlDocFrag.InnerXml = newNode;


XmlElement element = (XmlElement)xmlDocument.SelectSingleNode(@"//root/parent1[last()]");


element.InsertAfter(xmlDocFrag, element); //--> this throws an error
element.AppendChild(xmlDocFrag); //--> this works but it inserts the new node inside the last parent1 node

1 个答案:

答案 0 :(得分:1)

您非常接近,但是您需要的方法是InsertAfter,该方法必须在父级上使用。看看这个例子(注释在代码中)

string xml = @"
    <root>
    <parent1>
        <element1>
        </element1>
    </parent1>
    <parent1>
        <element1>
        </element1>
    </parent1>
    <parent1>
        <element1>
        </element1>
    </parent1>
    <parent2>
        <element1>
        </element1>
    </parent2>
    <parent2>
        <element1>
        </element1>
    </parent2>
    <parent3>
        <element2>
        </element2>
    </parent3>
    </root>
    ";

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);

//you had invalid xml here. <parent1/> instead of <parent1> and </parent1/> instead of </parent1>
string newNode = "<parent1><element1>1</element1></parent1>";

XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment();
xmlDocFrag.InnerXml = newNode;

XmlElement element = (XmlElement)xmlDocument.SelectSingleNode(@"//root/parent1[last()]");

//once you found last parent1 element, find it's parent
XmlNode parent = element.ParentNode;
//now, use that parent element and it's InsertAfter method to add new node as sibling to your found element
parent.InsertAfter(xmlDocFrag, element);
相关问题