2012-05-14 4 views
3

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

<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 имеют несколько детей, где первые и последние дети имена узлов одинаковы, где, как и другие узлы, за исключением первого и последнего узел имеют некоторое diffrent имени (идентичную каждому Другие). Я создаю функцию для вставки узла в определенную позицию, я не уверен в критериях, но могу быть в середине.

  • Как я могу вставить узел в определенную позицию. Я использую метод XMLnode.appendChild для вставки
  • Нужно ли переупорядочивать/сортировать узлы после вставки. Пожалуйста, предложите.
  • Как определить, что такое структура, и как я должен найти, где новый узел должен быть добавлен в соответствии с текущей структурой документа.

ответ

1

вы можете использовать XLinq для modify XML document

Ниже приведен пример 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(); 
3

Вот решение без использования LINQ к 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); 
Смежные вопросы