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

VB.NET Discussion :

problème lors de la sauvegarde du fichier XML


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut problème lors de la sauvegarde du fichier XML
    Bonjour,

    cela ne fait pas longtemps que je me suis mis à vb.net et XML

    j'arrive bien à accéder à mon fichier XML, le charger, lire les données à l'intérieure, les modifier et sauvegarder.

    toutefois lorsque je ré-ouvre mon fichier sauvegardé dans le bloc note, j'ai toute ma structure qui est décalée et certains caractères ont été remplacés. (ce qui me provoque des erreurs d'import par la suite car je dois importer ce fichier XML dans un autre logiciel qui va le traiter)

    exemple :
    Fichier d'origine :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <FEFExchangeFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FEFExchangeFile.xsd">
                    <contentHeader name="Programme XXX" version="0.0.000">
                                   <comment>Module Chrono Fine        : Testé
    Module OPG                    : Non Testé</comment>
                    </contentHeader>
                    <IOConf>
                                   <PLC></PLC>
                    </IOConf>
    </FEFExchangeFile>

    Fichier après sauvegarde :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <FEFExchangeFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FEFExchangeFile.xsd">
      <fileHeader company="Schneider Automation" product="Unity Pro XL V2.3 - 60728C" dateTime="date_and_time#2008-2-8-11:57:39" content="Fichier source projet" DTDVersion="6">
      </fileHeader>
      <contentHeader name="Programme GTE Salles Curan" version="0.0.000">
        <comment>Module Chrono Fine        : Testé
    Module OPG                    : Non Testé</comment>
      </contentHeader>
     <IOConf>
         <PLC></PLC>
       </IOConf>
    </FEFExchangeFile>

    Pour sauvegarder mon fichier j'utilise :

    documentXML.Save(Nom_du_fichier_à_sauvegarder)

    quelqu'un sait pourquoi? et surtout comment éviter cela?

    Merci à vous

  2. #2
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Mais c'est quoi le problème au juste?
    Que les caractères accentués qui étaient faux deviennent correctes?

    Niveau structure il est parfait...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    ok, je vais un peu mieux m'expliquer pour mettre en situation:

    le fichier XML de base est unn projet exporté d'un logiciel de programation automate, donc contenant toute la config du projet allant des paramètres automate aux codes.

    le but de mon travail est de pouvoir, a partir du logiciel que je suis en train de réaliser, accéder à ce fichier xml pour y insérer des nouvelles données traitées ailleurs. Et ensuite ré-importer ce fichier dans le logiciel automate. Or lors de cet import j'ai une erreur.
    mon fichier XML modifié ,ouvert dans bloc note, a une structure identique à celui d'origine. les seuls changement sont ceux que j'ai notifiés dans mon message précédent.

    les tests que j'ai effectués concernes qu'une petite partie du fichier xml. et je ne pense pas que cela vienne de mes modifications (mise à "true" un parametre "false" par exemple)

    Et donc je reprend ma question : pourquoi lors de ma sauvegarde avec la méthode "save()" j'ai un fichier XML légèrement différent de l'ancien mais qui se devient alors incompatible avec mon logiciel automate? cela ne devrai pas seulement enregistré le fichier avec les modifications sans toucher à la structure ou au paramètres dont je ne m'occupe pas?

    je suis désolé mais y'a un truc que je comprend pas

  4. #4
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Ca ressemble fortement à un problème d'encoding. Comment tu procèdes pour la lecture du fichier, tu emploies des objets streams?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    l'encoding se base sur "UTF-8"

    mais normalement mon fichier xml se base sur plusieurs schéma XSD spécifiques pour les différentes parties, or il doit falloir lorsque je demande l'enregistrement de mon fichier, après modifications, que je lui dise de respecter ces schémas la.

    Mais comment je peux lui dire d'utiliser tel ou tel XSD pour l'enregistrement?

    je pense pas que cela se fasse de façon automatique, je dois lui dire en dur dans mon code non?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    Pardon, j'en ai oublié de répondre a ta question.

    voici un exemple de mon code que j'utilise et qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
        ''----------------Déclaration des variables XML---------------------'
        Private documentXML As XmlDocument
        Private noeuxRacine, noeuxEnf As XmlNode
        Private noeuxEnfList As XmlNodeList
     
        Private elementXML, elementXML2 As XmlElement
        Private texteXML As XmlText
        Private attributXML As XmlAttribute
        Private attribCollecXML As XmlAttributeCollection
        Private Sub LireXEF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LireXEF.Click
     
            Charger_XML()
     
            Try
                documentXML = New XmlDocument               'nouveau objet XML
                documentXML.Load(Nom_Fic_Conf)              'mise en mémoire du projet
     
                ComboBox1.Items.Clear()
                ListBox1.Items.Clear()
     
                For Each elementXML In noeuxRacine
                    ComboBox1.Items.Add(elementXML.Name)
                Next
     
                If elementXML.GetAttribute("autoRun") = "false" Or Nothing Then
                    elementXML.SetAttribute("autoRun", "true")
                    Run_Automate.Checked = True
                    ' documentXML.Save(Nom_Fic_Conf)
                    MsgBox("mise en Run automatique de l'automate validée")
                Else
                    Run_Automate.Checked = True
                End If
     
            Catch ex As XmlException
     
                MessageBox.Show(ex.Message, "Problème XML", MessageBoxButtons.OK, MessageBoxIcon.Error)
     
            Catch ex As Exception
     
                MessageBox.Show(ex.Message, "Problème", MessageBoxButtons.OK, MessageBoxIcon.Error)
     
            End Try
     
     
        Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save.Click
            documentXML.Save(Nom_Fic_Conf)
            MsgBox("projet sauvegardé")
        End Sub
    enfin je vais faire des modifs de toute maniere sur le traitement car je troue que utiliser Xpath sera plus simple que la méthode que j'utilise actuellement.

  7. #7
    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
    Alors pour reprendre, XML n'est pas un format texte strict, ce qui veut dire qu'un document XML peut se représenter sous diverses formes une fois transformé en texte.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Outer>
        <Inner></Inner>
    </Outer>
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Outer><Inner></Inner></Outer>
    Sont deux documents XML absolument identiques, du point de vue XML, pourtant leur représentation textuelle est différente.

    Tout ça pour expliquer que le framework charge un document XML en mémoire sous forme objet et non plus textuelle. Quand tu demandes l'enregistrement, il crée une nouvelle représentation textuelle qui n'a aucun lien avec le format de départ (si ce n'est le nom du fichier dans lequel elle est écrite).

    En utilisant un XmlTextWriter, tu as la possibilité de modifier la représentation textuelle (indentation ou non, encodage, etc).

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    ok, merci pour l'explication
    donc il me faut passer par un XmlTextWriter plutôt que ce que je fais actuellement, le problème viendrai de la.

  9. #9
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Dans le document d'origine, le UTF-8 qui ne supporte pas les accents ça me dépasse, j'aurai tendance à penser qu'en vérité ça n'en est pas.
    Tu charges le document sans passer par des flux donc ça devrait pas se perdre en route.

    Si tu enregistres le document sitôt après l'avoir chargé, sans aucune manipulation ça donne quoi?

  10. #10
    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
    Si tu as l'aide locale installée sur ta machine, tu peux utiliser cette URL pour accéder à la documentation :
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/WD_XML/html/ef62dcef-9f76-45d3-97f2-ca71c9f0e66d.htm

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    _skip a dit :
    Si tu enregistres le document sitôt après l'avoir chargé, sans aucune manipulation ça donne quoi?
    Cela me donne exactement la même chose, cela ne vient donc pas des modifications que j'apporte.

    SaumonAgile a dit :
    Si tu as l'aide locale installée sur ta machine, tu peux utiliser cette URL pour accéder à la documentation :
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/WD_XML/html/ef62dcef-9f76-45d3-97f2-ca71c9f0e66d.htm
    ok je vais voir ça, merci

  12. #12
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Dans le fichier d'origine.
    On voit que l'encodage est spécifié UTF8 mais es-tu bien sûr que le format du fichier en est bel et bien?

    Si tu le sauves au format ISO 8859-1 ça te donne quoi?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    si j'utilise le format ISO 8859-1 j'obtiens une erreur à l'ouverture de mon fichier :

    Le système ne prend pas en charge le codage "ISO 8859-1". Ligne1, position31.
    Mais de toute manière je suis obligé d'utiliser le format UTF8, question de compatibilité par la suite avec les autres logiciels.

  14. #14
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Autre chose, tu ouvres le fichier d'origine avec bloc note, tu remplaces UTF8 par
    iso-8859-1 dans la balise du haut.

    Tu ouvres le fichier avec explorer ou n'importe, les accents fonctionnent correctement?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    ok, en fait j'avais mal tapé le tyde de codage, dsl

    donc j'ai fait la manip avec le codage iso-8859-1 :

    _changement du type de codage à partir d'un fichier texte
    _lecture et enregistrement du fichier via mon programme
    _test d'import du nouveau document XML dans le programme automate

    je n'ai plus le problème des accents, ils ne remplacent plus les caractères spéciaux comme avant lorsque je vérifie via le bloc note.
    toutefois j'ai toujours mon décalage de la structure mais ce n'est pas ça qui est génant.
    Par contre lors de l'import, j'ai des erreurs justement à propos de ces caractères spéciaux qui ne sont plus reconnus et donc il me manque des paramètres car ne sont pas chargés.

    je suis obligé de garder le codage UTF-8 car le logiciel automate est un logiciel propriétaire et je ne peux rien toucher dessus en ce qui concerne l'encodage XML.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    en fait il me faut valider mon fichier xml via des schémas xsd. donc je vais me pencher la dessus.

    J'ai trouvé ce lien sur le site qui donne des exemples simples pour plusieurs langages:
    http://xml.developpez.com/sources/?p...e_XSD_VBNet_11

    si quelqu'un a d'autres liens utiles je suis preneur

Discussions similaires

  1. Problème lors de lecture ou écriture fichier XML.
    Par Jeano81 dans le forum VB.NET
    Réponses: 9
    Dernier message: 09/05/2015, 22h59
  2. Problème lors de la sauvegarde d'un fichier .mat
    Par said_gi dans le forum MATLAB
    Réponses: 2
    Dernier message: 22/05/2010, 11h23
  3. [JDOM] Problème lors de lecture d'un fichier XML
    Par 0coco0 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 23/03/2009, 15h11

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