Как читать и создавать дочерние узлы, используя XmlReader - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть xml файл. Я пытаюсь сгенерировать новый xml файл из этого старого xml файла с некоторыми изменениями.

У меня xml вот так

<Parent>
<child>
  <child 1 />
  <child 2 />
  <child 3>
      <child A1 />
      <child A2 />
      <child A3 />
  </child 3 >
  <child 4 />
  <child 5 />
</child>
<Parent>

Я пытаюсь сгенерировать новый xml файл как этот

<Parent>
 <Child>
  <child 1/>
  <child 3/>
  <child 3/>
      <child A1 />
      <child A2 />
      <child A3 />
  </child 3 >
  <child 4 />
  <child 5 />
 </Child>
 <Child>
  <child 1 />
  <child 2 />
  <child 3>
      <child A1 />
      <child A2 />
      <child A3 />
  </child 3 >
  <child 4 />
  <child 5 />
 </Child>
</Parent>

Я пробовал ниже код

XmlReader xmlreader;
if (xmlTextReader.ReadToFollowing("Parent"))  
{                   
 XmlReader inner = xmlTextReader.ReadSubtree();
 while (isStartElement)
 {
 inner.Read();
 switch (xmlTextReader.NodeType)
 {
 case XmlNodeType.Element:
     xmlreader = inner.ReadSubtree();                           
     xmlreader.ReadToDescendant("Parent");
     xmlreader.Read();

     do
     {
       if (xmlTextReader.Name != "Parent")
       {
          xmlTextWriter.WriteStartElement(xmlTextReader.Prefix, xmlTextReader.LocalName,xmlTextReader.NamespaceURI);
       }
       if (xmlTextReader.HasAttributes)
       {
            while (xmlTextReader.MoveToNextAttribute())
            {
              xmlTextWriter.WriteAttributeString(xmlTextReader.Name,xmlTextReader.Value.ToString());
            }
        }

     xmlTextWriter.WriteEndElement();

   } while (inner.ReadToNextSibling("Child"));                              

    break;
  }
 }
}

Я пробовал выше код, но он получает только возвращение ниже xml

<Child />
<Child />

Это возвращение на родительском узле child1 child2 et c. узлы

Я использую 2 xmlreader для чтения xml

Мне нужно вывод xml, например

<Child>
  <child 1/>
  <child 3/>
  <child 3/>
      <child A1 />
      <child A2 />
      <child A3 />
  </child 3 >
  <child 4 />
  <child 5 />
 </Child>
 <Child>
  <child 1 />
  <child 2 />
  <child 3>
      <child A1 />
      <child A2 />
      <child A3 />
  </child 3 >
  <child 4 />
  <child 5 />
 </Child>

Мне нужен некоторый код во время выполнения для получения дочерние узлы, а затем закройте родительский узел. так что я получу желаемый результат

...