XmlTextWriter

Résolu
Signaler
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013
-
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013
-
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 :

XmlDocumentdoc = newXmlDocument();
doc.Load(txtInputDirectory.Text + m_ProjectName +".xml");

[Quelques opérations de lecture/modification]

XmlTextWriterw = newXmlTextWriter(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" ?>
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 xmlns:xi="http://www.w3.org/2001/XInclude">
       
        />
       
       
       
    </fichiers>
   
   

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.

Le travail c'est la santé, ne rien faire c'est la préservé !!!

3 réponses

Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013
1
J'ai la réponse :
Il faut utiliser la méthode XmlDocument.Save() au lieu du XmlTextWriter.


Le travail c'est la santé, ne rien faire c'est la préservé !!!
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
Salut,

Ouch, un DOM sur des fichiers de 130Mo ça doit faire mal côté ressources.
Petite remarque sur ton façon de batir les chemins : regarde du côté de Path.Combine :-)

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013
1
Salut,
Oui, effectivement c'est assez lourd, mais j'ai pas vraiment le choix, c'est pas moi qui choisit le format des données ...
Merci de a remarque, j'irai voir ce Path.Combine lundi.


Le travail c'est la santé, ne rien faire c'est la préservé !!!