Вопрос по asp.net, xml, c#, vb.net, .net – Вставка узла XML в определенную позицию

4

У меня есть файл XML, и я загружаю его в Xmldocument. Этот документ имеет узел с некоторыми дочерними узлами, подобными этому

<xml here>
 <somenode>
   <child> </child>
   <children></children>
   <children></children>
   <children></children>  // I need to insert it
   <children></children>  // I need to insert this second time
   <children></children>
   <children></children>
   <child> </child>
 <somenode>
<xml here>

здесь у somenode есть некоторые дочерние узлы, где имена первого и последнего дочерних узлов такие же, как и у других узлов, за исключением того, что первый и последний узлы имеют разные имена (идентичные друг другу). Я создаю функцию для вставки узла в определенную позицию, я не уверен в критериях, но может быть в середине.

how can I insert node in specific position. I am using XMLnode.appendChild method for insertion Do I need to rearrange/sort nodes after insertion. Please suggest. How can I determine what is structure and how should I find where the new node should be added according to current document structure.

Ваш Ответ

3   ответа
3

without using LINQ to XML, Он реализован как метод расширения дляXmlNode учебный класс:

public static void InsertAt(this XmlNode node, XmlNode insertingNode, int index = 0)
{
    if(insertingNode == null)
        return;
    if (index < 0)
        index = 0;

    var childNodes = node.ChildNodes;
    var childrenCount = childNodes.Count;

    if (index >= childrenCount)
    {
        node.AppendChild(insertingNode);
        return;
    }

    var followingNode = childNodes[index];

    node.InsertBefore(insertingNode, followingNode);
}

Теперь вы можете вставить узел в нужную позицию так же просто, как:

    parentXmlNode.InsertAt(childXmlNode, 7);
0
попытаться собрать всех потомков в коллекцию и после этого установить значение
1

изменить документ XML

Ниже приведен пример модификации XML

    String xmlString = "<?xml version=\"1.0\"?>"+"<xmlhere>"+
    "<somenode>"+
    " <child> </child>"+
    " <children>1</children>"+ //1
    " <children>2</children>"+ //2
    " <children>3</children>"+ // 3, I need to insert it
    " <children>4</children>"+  //4,  I need to insert this second time
    " <children>5</children>"+
    " <children>6</children>"+ 
    " <child> </child>"+
    " </somenode>"+
    "</xmlhere>";

    XElement root = XElement.Parse(xmlString);
    var childrens = root.Descendants("children").ToArray();
    var third = childrens[3];
    var fourth = childrens[4];
    third.AddBeforeSelf(new XElement("children"));
    fourth.AddBeforeSelf(new XElement("children"));

    var updatedchildren = root.Descendants("children").ToArray();

Похожие вопросы