Bonjour à tous.

Je m'arrache les cheveux depuis un petit moment sur un truc tout con.
A partir d'un fichier xml pré-existant ayant la structure suivante :

Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<root>
  <child1>value1</child1>
  <child2>value2</child2>
  <child4>value4</child4>
  <child5>value5</child5>
</root>

Je voudrais insérer une node <child3>value3</child3> entre child2 et child4 pour obtenir ça :

Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<root>
  <child1>value1</child1>
  <child2>value2</child2>
  <child3>value3</child3>
  <child4>value4</child4>
  <child5>value5</child5>
</root>

Mon problème, c'est que la bibliothèque System.Xml propose les méthodes qui ne génèrent pas les indentations et retours à la ligne adéquat.

Avec le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
XmlDocument docXML = new XmlDocument();
docXML.Load(fileXML);
XmlNode root = docXML.DocumentElement;
XmlNode child2Node = root.SelectSingleNode("child2");
XmlNode child3Node = docXML.CreateElement("child3");
child3Node.InnerText = value3;
root.InsertAfter(child3Node, child2Node);
Je me retrouve avec ça :

Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<root>
  <child1>value1</child1>
  <child2>value2</child2><child3>value3</child3>
  <child4>value4</child4>
  <child5>value5</child5>
</root>

De la même manière, avec ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
XmlDocument docXML = new XmlDocument();
docXML.Load(fileXML);
XmlNode root = docXML.DocumentElement;
XmlNode child4Node = root.SelectSingleNode("child4");
XmlNode child3Node = docXML.CreateElement("child3");
child3Node.InnerText = value3;
root.InsertBefore(child3Node, child4Node);
Je me retrouve avec ça :

Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<root>
  <child1>value1</child1>
  <child2>value2</child2>
  <child3>value3</child3><child4>value4</child4>
  <child5>value5</child5>
</root>

Je retrouve le même problème avec la méthode AppendChild si j'essaie d'insérer ma node sans me soucier de sa position précise :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
XmlDocument docXML = new XmlDocument();
docXML.Load(fileXML);
XmlNode root = docXML.DocumentElement;
XmlNode child3Node = docXML.CreateElement("child3");
child3Node.InnerText = value3;
root.AppendChild(child3Node);
ce qui donne ça :

Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<root>
  <child1>value1</child1>
  <child2>value2</child2>
  <child4>value4</child4>
  <child5>value5</child5>
<child3>value3</child3></root>

Y a-t'il quelque chose que je n'ai pas pris en compte?

Merci de votre aide.