IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

XmlTextWriter sortie tronquée


Sujet :

C#

  1. #1
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut XmlTextWriter sortie tronquée
    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.

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Tu as essayé en utilisant Save à la place de WriteTo ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Il faut appeler la méthode Flush de l'objet XmlTextWriter pour vider le tampon et tout écrire proprement je pense. Il serait logique que l'appel à WriteTo le fasse pourtant, mais je ne vois que ca. Sinon, appeler la méthode Save est plus simple je pense aussi.
    Pas de questions techniques par MP

  4. #4
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    CA MARCHEEEE ! Merci Merci Merci, j'en avais trop marre de bloquer pour ca (Comment j'ai pu passer à coter de la méthode Save alors que j'ai charger avec un Load ??? )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. jsch ligne en sortie tronquée
    Par kilou88 dans le forum Général Java
    Réponses: 5
    Dernier message: 30/01/2012, 13h45
  2. Reports9i texte tronqué sur sortie RTF
    Par bellig dans le forum Reports
    Réponses: 0
    Dernier message: 14/04/2008, 13h59
  3. [LG]Entrées et sorties redirigée
    Par Lady dans le forum Langage
    Réponses: 17
    Dernier message: 10/05/2003, 18h33
  4. Rediriger le plux de sortie
    Par Groove dans le forum C
    Réponses: 5
    Dernier message: 17/04/2003, 17h16
  5. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo