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

API, COM et SDKs Delphi Discussion :

XMLDocument SaveTofile et format


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : janvier 2006
    Messages : 621
    Points : 1 259
    Points
    1 259
    Par défaut XMLDocument SaveTofile et format
    Bonjour à tous,

    je suis sous XE2, j'ai un objet TXmlDocument qui contient ce fichier XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <Personnage>
     <Equipement>
    ...
      </Equipement>
    </Personnage>
    J'ajoute un node à la racine avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RacinePerso := XMLPersonnage.DocumentElement;
    RacinePerso.AddChild('DonneesCalculee');
    XMLPersonnage.SaveToXML();
    Et j'obtiens le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    </Armes>
      </Equipement>
      <DonneesCalculee/></Personnage>
    Genre il manque un retour charriot entre <DonneesCalculee/> et </Personnage>

    Je fais comment pour avoir ce truc ? Avant j'utilisais une ancienne librairie "NativeXml" qui offrait une propriété "XfReadable" afin de pallier ça? Des idées ?

    Merci.
    "L'incohérence de ceux qui dirigent et l'incompétence de ceux qui critiquent sont un vibrant hommage à ceux qui exécutent."
    Général George S. PATTON. Messine 1943.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 128
    Points : 2 806
    Points
    2 806
    Par défaut
    ça ne fonctionne pas en utilisant NodeIndentStr et et l'option doNodeAutoIndent ??

  3. #3
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : janvier 2006
    Messages : 621
    Points : 1 259
    Points
    1 259
    Par défaut
    ben déjà ces deux trucs ont pas l'air de faire partie soit de XMLDocument ni de IXmlNode...
    J'ai bien trouve un "FormatXMLData" mais je trouve pas comment l'utiliser...
    "L'incohérence de ceux qui dirigent et l'incompétence de ceux qui critiquent sont un vibrant hommage à ceux qui exécutent."
    Général George S. PATTON. Messine 1943.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : janvier 2006
    Messages : 621
    Points : 1 259
    Points
    1 259
    Par défaut
    oops j'avais pas bien lu. Ca doit être la fatigue... Je cherchais dans les propriétés et pas dans les constantes.

    Bon je progresse :
    La fin de mon fichier de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		</Armes>
    	</Equipement>    
    </Personnage>
    Le code Delphi :
    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
    Procedure TOPersonnage.CalculerPErsonnage;
    Var nodecalcul : IXmlNode;
    Begin
      XMLPersonnage.Options :=  [doNodeAutoIndent];
      XMLPersonnage.NodeIndentStr := '    ';
      nodecalcul := RacinePerso.AddChild('DonneesCalculee');
      with nodecalcul do
        begin
          with AddChild('Test1') do
            begin
              addchild('autre1');
              AddChild('Autre2');
              Attributes['attr'] := 'attribut';
            end;
          AddChild('Test2');
        end;
    End;
    Et le résultat final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	</Equipement>    <DonneesCalculee>
            <Test1 attr="attribut">
                <autre1/>
                <Autre2/>
            </Test1>
            <Test2/>
        </DonneesCalculee>
    </Personnage>
    Il reste encore un hiatus au niveau du premier <DonneesCalculee>. PAr contre le </DonneesCalculee> lui est bien indenté...
    JE vais essayer de setter Options avant la lecture du fichier on sait jamais...
    "L'incohérence de ceux qui dirigent et l'incompétence de ceux qui critiquent sont un vibrant hommage à ceux qui exécutent."
    Général George S. PATTON. Messine 1943.

  5. #5
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : janvier 2006
    Messages : 621
    Points : 1 259
    Points
    1 259
    Par défaut
    Bon j'ai essayé de mettre le setting des options entre la création du XMLDocument et le loadfromfile, mais rien n'y fait : le premier node créé est toujours mal indenté...
    "L'incohérence de ceux qui dirigent et l'incompétence de ceux qui critiquent sont un vibrant hommage à ceux qui exécutent."
    Général George S. PATTON. Messine 1943.

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 128
    Points : 2 806
    Points
    2 806
    Par défaut
    XMLPersonnage est le IXMLDocument je suppose ?
    Tu crées un fichier xml de toutes pièces ou tu modifies un existant ?
    Si tu le crée, il faut définir des options au moment de la création, avant le active := True;

  7. #7
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : janvier 2006
    Messages : 621
    Points : 1 259
    Points
    1 259
    Par défaut
    oui le XMLPersonnage est bien un IXmlDocument.
    Oui c'est bien un fichier existant que je modifie ensuite. Mais le problème se posera aussi pour de nouveaux fichiers que je vais créer.
    Mais maintenant je sais comment faire...
    Sauf qu'il manque toujours un saut de ligne...
    "L'incohérence de ceux qui dirigent et l'incompétence de ceux qui critiquent sont un vibrant hommage à ceux qui exécutent."
    Général George S. PATTON. Messine 1943.

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 128
    Points : 2 806
    Points
    2 806
    Par défaut
    Je ne vois pas trop ce qui peut se passer chez toi.
    J'ai volontairement "pourri" un fichier xml, j'ai utilisé le code suivant qui a tout remis en place correctement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
     x: IXMLDocument;
    begin
     x := LoadXMLDocument('d:\aaa.xml');
     x.Options := [doNodeAutoIndent];
     x.NodeIndentStr := #9;
     x.SaveToFile('D:\bbb.xml');
     x := nil;
    Tu es sur que ton fichier xml est correct ? Tu as essayé de l'ouvrir dans Internet explorer pour voir s'il ressort une erreur ?

  9. #9
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : janvier 2006
    Messages : 621
    Points : 1 259
    Points
    1 259
    Par défaut
    Ouaip mon fichier XML est bon, il s'ouvre sans erreur sous IE et sous Notepad++.
    Par contre en voyant ton code, j'ai une différence : je ne l'ouvre pas comme toi. Je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      xmlPersonnage := TxmlDocument.Create(nil);
      XMLPersonnage.Options :=  [doNodeAutoIndent];
      XMLPersonnage.NodeIndentStr := '    ';
      xmlPersonnage.LoadFromFile(cheminpersos + nom + '.xml');
      RacinePerso := XMLPersonnage.DocumentElement;
    Ça viendrait de là le soucis ?
    D'ailleurs, le mien est un TXmlDocument et pas un IXMLDocument... J'ai toujours pas très bien compris la subtilité de ces interfaces d'ailleurs...
    "L'incohérence de ceux qui dirigent et l'incompétence de ceux qui critiquent sont un vibrant hommage à ceux qui exécutent."
    Général George S. PATTON. Messine 1943.

  10. #10
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 128
    Points : 2 806
    Points
    2 806
    Par défaut
    Je viens de tester ton code (un peu allégé mais ça revient au même):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      with TxmlDocument.Create(self) do
      begin
        Options :=  [doNodeAutoIndent];
        NodeIndentStr := '    ';
        LoadFromFile('d:\aaa.xml');
        SaveToFile('d:\bbb.xml');
        Free;
      end;
    Le résultat est le même: ça fonctionne.

    Peut-être un problème de version de delphi. Là, je teste sous un vieux Delphi 7. Je ferai le même test au bureau tout à l'heure sur XE2.

    L'objet TXMLDocument n'est qu'une facilité qui permet d'utiliser l'interface sans se poser de question sur le comptage de référence. Si tu importes un activex par exemple, delphi te proposera de créer l'objet permettant de manipuler l'interface sur l'activex.

  11. #11
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 128
    Points : 2 806
    Points
    2 806
    Par défaut
    Apparemment il y a un problème quand il manque un espace entre 2 node.

    <ElementType>
    ...
    </ElementType><ElementType>

    pas d'espace entre les 2, il est perdu et le laisse sur la même ligne. Si la source est </ElementType> <ElementType> , ça fonctionne.

    Me demande pas pourquoi pas, j'en sais rien

  12. #12
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : janvier 2006
    Messages : 621
    Points : 1 259
    Points
    1 259
    Par défaut
    ben d'un autre cote le fichier initial se terminait comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		</Armes>
    	</Equipement>    
    </Personnage>
    donc en fait le format etait bon et il y a un retour charriot. Tu veux dire qu'il faudrait un espace en plus du retour charriot ?
    "L'incohérence de ceux qui dirigent et l'incompétence de ceux qui critiquent sont un vibrant hommage à ceux qui exécutent."
    Général George S. PATTON. Messine 1943.

  13. #13
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : janvier 2006
    Messages : 621
    Points : 1 259
    Points
    1 259
    Par défaut
    bon j'ai essayé d'ajouter des espaces apres le tag "Equipement" mais ca change rien. Je crois que je vais rester sur ma "solution" qui est d'ajouter un tag vide avant mes données importantes...
    "L'incohérence de ceux qui dirigent et l'incompétence de ceux qui critiquent sont un vibrant hommage à ceux qui exécutent."
    Général George S. PATTON. Messine 1943.

  14. #14
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 128
    Points : 2 806
    Points
    2 806
    Par défaut
    une question quand même: Je sais bien que visuellement c'est plus joli mais le but d'un fichier xml c'est pas d'être beau à voir.

    Quel avantage pour toi à avoir un formatage parfait ?

  15. #15
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : janvier 2006
    Messages : 621
    Points : 1 259
    Points
    1 259
    Par défaut
    je te dirais bien... La beauté du geste", mais j'ai l'impression que ca te laisse froid...
    Non en fait, c'est que je peux être amené à le modifier à la main, et du coup c'est plus facile si il est bien indenté. Mais ça devrait pas arriver bien souvent...
    "L'incohérence de ceux qui dirigent et l'incompétence de ceux qui critiquent sont un vibrant hommage à ceux qui exécutent."
    Général George S. PATTON. Messine 1943.

  16. #16
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 128
    Points : 2 806
    Points
    2 806
    Par défaut
    si ce n'est que pour des modifications manuelles ponctuelles, tu as une solution gratuite et toute simple : Notepad++ et tu ajoutes le complément XML qui te donne plusieurs options de formatage xml qui fonctionnent très bien. Enfin, à condition que ton xml ne soit pas énorme sinon, il lui arrive de se gaufrer lamentablement. Tu as aussi Editix qui est un éditeur spécialisé dans le xml et qui peut te formater ton fichier avec le raccourci Ctrl + R. Il y a une version gratuite qui fonctionne sans problème.

  17. #17
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 128
    Points : 2 806
    Points
    2 806
    Par défaut
    Quelques liens interessants si tu veux aller plus loin. Ces solutions semblent pas mal:

    http://sourceforge.net/projects/curlpas/files/
    http://stackoverflow.com/questions/2...-an-xml-string
    http://elsdoerfer.name/libtidy

  18. #18
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : janvier 2006
    Messages : 621
    Points : 1 259
    Points
    1 259
    Par défaut
    Merci pour les liens.
    Effectivement pour l'édition rapide, j'utilise Notepad++ qui est un vrai bonheur...
    "L'incohérence de ceux qui dirigent et l'incompétence de ceux qui critiquent sont un vibrant hommage à ceux qui exécutent."
    Général George S. PATTON. Messine 1943.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/01/2015, 13h49
  2. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34
  3. Format d'un exe pour DOS et pour Windows
    Par Alfhiger dans le forum Assembleur
    Réponses: 4
    Dernier message: 12/06/2002, 11h57
  4. lire une image au format RAW
    Par Anonymous dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/05/2002, 00h11
  5. Réponses: 3
    Dernier message: 06/05/2002, 18h24

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