Bonjour, je me permet de vous embêter avec une question car je cherche la réponse depuis deux jour sans succès.
Voici mon problème:
Je charge un document Xml via XmlDocument.load(string filename)
Jusqu'ici, tout fonctionne.
Ensuite je lis quelques noeud avec éventuellement quelques modifications sur des noeud de texte.
La aussi, aucun problème.
Enfin je cherche à sauvegarder les éventuelles modifications.
J'utilise donc le code suivant :
XmlDocument doc = new XmlDocument();
doc.Load(txtInputDirectory.Text + m_ProjectName +".xml");
[Quelques opérations de lecture/modification]
XmlTextWriter w = new XmlTextWriter(m_ProjectName + ".xml", Encoding.UTF8);
w.Indentation = 1;
w.IndentChar = '\t';
w.Formatting = Formatting.Indented;
doc.WriteTo(w); // Ou doc.WriteContentTo(w), ca donne le même problème.
Pendant cette écriture, aucune erreure/exception n'est lancée. Cependant, quand j'ouvre mon fichier, il n'est pas complet.
Voici un petit extrait de ce que ca donne. Tout ce qui est en violet est manquant par rapport à l'original.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl" ?>
<project xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project.xsd">
<config>
[Je coupe un peu car le fichier est très long et il contient des données que je n'ai pas le droit de divulguer, cependant, j'ai vérifier, et revérifier, aucun problème de syntaxe ici. Et tout est conforme au XSD.]
</map>
<fichiers xmlnsi="http://www.w3.org/2001/XInclude">
<include href="./folder/fichier1.xml" />
<include href="./folder/fichier2.xml" />
<include href="./folder/fichier3.xml" />
<include href="./folder/fichier4.xml" />
<include href="./folder/fichier5.xml" />
</fichiers>
<images>
</images>
</project>
La où est encore plus étrange, c'est que pour tenter de solutionner le problème, j'ai écrit ma propre fonction WriteTo(). Elle n'svait pas pour but d'être parfaite et de remplacer la fonction originale, mais plutot de pouvoir suivre l'écriture des noeuds en pas à pas. Résultat : Aucune cassure dans l'arbre des noeuds, cependant, le XmlTextWriter continu de s'arrêter d'écrire sans retourner la moindre exception.
Encore une précision, le morceau manquant n'est pas toujours le même. Il semble varier au fil des compilations. Cependant, le writer semble s'arreter toujours à peu pres au même endroit (sur fichier4.xml par exemple). Il s'est déjà également arrêter beaucoup plus haut dans le document.
Voici les test que j'ai effectuer et qui ont retourner le même problème :
1) Plus aucune modification de noeud.
2) Lecture d'un document et écriture de celui-ci dans un autre document aussitot après.
3) Lecture/Ecriture de documents plus petits (30ko au lieu de 130Mo)
4) Changement du formattage (indented ou non)
5) Methode WriteTo et WriteContentTo utilisé sur un XmlDocument et sur un XmlNode
6) Changement d'encodage (ASCII / UTF-8)
Voilà, c'est à peu pres tout. Je ne comprend pas du tout ce qui peut provoquer cet arrêt de l'écriture.
Le plus gros problème c'est que c'est assez urgent, car je dois présenter mon travail à mon boss, si je peux pas enregistrer mon XML, alors l'application cible ne pourra pas le lire et afficher mes modifications.
Merci de bien vouloir me sauver la vie.
Partager