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

Outils Delphi Discussion :

Ecrire dans fichier XML existant.


Sujet :

Outils Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut Ecrire dans fichier XML existant.
    Bonjour,

    Je travail sur un application qui, lors de son installation doit écrire dans un fichier XML.

    Ce fichier se nomme: "dll.xml".
    je dois y écrire une simple série de ligne que voici (écrites à la main):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
       <Launch.Addon>
            <Name>CPS</Name>
            <Disabled>False</Disabled>
            <ManualLoad>False</ManualLoad>
            <Path>CPSModulesStart.dll</Path>
        </Launch.Addon>
    Voici ce que j'ai essayé sans succès:
    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
     
     
    function NextButtonClick(CurPageID: Integer): Boolean; 
    var
    	XMLDoc, NewNode, NewName, NewDisabled, NewManualLoad, NewPath,  RootNode: Variant;
    	Path: String;
    begin
      if curpageID=wpReady then
      begin
        Path := ExpandConstant('{src}\');
     
        { Load the XML File }
        XMLDoc := CreateOleObject('MSXML2.DOMDocument');
        XMLDoc.async := False;
        XMLDoc.resolveExternals := False;
        XMLDoc.load(Path + XMLFileName);
        if XMLDoc.parseError.errorCode <> 0 then
          RaiseException('Error on line ' + IntToStr(XMLDoc.parseError.line) + ',position ' + IntToStr(XMLDoc.parseError.linepos) + ': ' + XMLDoc.parseError.reason);
        MsgBox('Loaded the XML file.', mbInformation, mb_Ok);
        { Modify the XML document }
        NewNode       := XMLDoc.createElement('Launch.Addon');
        RootNode      := XMLDoc.documentElement;
        RootNode.appendChild(NewNode);
     
        NewName       := XMLDoc.createElement('Name');
        NewNode.appendChild(NewName);
        NewNode.LastChild.text:= 'CPS';
     
        NewDisabled   := XMLDoc.createElement('Disabled');
        NewName.appendChild(NewDisabled);
        NewName.LastChild.text:= 'False';
     
        NewManualLoad := XMLDoc.createElement('ManualLoad');
        NewDisabled.appendChild(NewManualLoad);
        NewDisabled.lastChild.text:= 'False';
     
        NewPath       := XMLDoc.createElement('Path');
        NewManualLoad.appendChild(NewPath);
        NewManualLoad.lastChild.text:='CPSModulesStart.dll';
     
    	{ Save the XML document }
        XMLDoc.Save(Path + XMLFileName);
        MsgBox('Saved the modified XML as ' + XMLFileName, mbInformation,   mb_Ok);
        Result:=True;
        end;
        Result:=True;
    end;
    Comment puis-je faire à partir de la section code de Inno Setup 5.3.3?
    Merci de votre aide.

    Cordialement
    Pierre

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par Pierre95 Voir le message
    Comment puis-je faire à partir de la section code de Inno Setup 5.3.3?
    Merci de votre aide.
    2 possibilités :
    1. Depuis Innosetup en lisant et/ou créant le fichier XML comme si c'était un fichier texte (voir les fonctions fournies dans l'aide d'Innosetup, section script)
    2. En passant par une dll qui contiendra une fonction :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      function XMLFileUpdate(Path, XMLFileName: PChar): Boolean;
      var
        XMLDoc, NewNode, NewName, NewDisabled, NewManualLoad, NewPath, RootNode: Variant;
      begin
        // Mise à jour du fichier XML
        // ...
      end;
      et un appel de celle ci depuis la section de code :
      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
       
      [ FILES ]
      ...
      ; "Flags: dontcopy" car la dll n'est utilisé que par l'installeur
      Source: "MaDll.dll"; DestDir: "{app}"; Flags: dontcopy
       
      [ CODE ]
      // Prototype de la fonction proposée par la dll
      // setuponly car la dll n'est utilisé que par l'installeur
      function MaDll_XMLFileUpdate(Path, XMLFileName: PChar): Boolean;
      external 'XMLFileUpdate@files:MaDll.dll stdcall setuponly';
      // Attention à bien respecter les conventions d'appel entre dll et le script !
       
      function NextButtonClick(CurPageID: Integer): Boolean; 
      var
        XMLDoc, NewNode, NewName, NewDisabled, NewManualLoad, NewPath,  RootNode: Variant;
      	Path: String;
      begin
        Result := True;
        if curpageID=wpReady then
        begin
          Path := ExpandConstant('{src}\');
          XMLFileName := 'dll.xml';
       
          // Appel de la fonction de la dll
          Result := MaDll_XMLFileUpdate(Path, XMLFileName);
        end;
      end;

    Attention, dans votre code de mise à jour, je vois que vous recréez des nœuds dans le fichier XML plutôt que les mettre à jour !
    Validez votre appel à une dll depuis une application de test Delphi...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut
    Merci beaucoup pour cette réponse détaillée.

    En effet, je dois simplement créer ces nœuds avec des données fixes une fois pour toute lors de l'installation. Ceci dans un fichier existant au paravant.

    Je vais tenter l'écriture de type fichier texte qui semble la plus simple à réaliser.

    Je reviendrai pour vous tenir informé

    Merci encore
    Cordialement

    Pierre

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut
    Bonjour,

    Je repasse pour remercier vivement Ph. B. pour ses précieux conseils qui m'ont permis d'aboutir à une code qui fonctionne à merveille

    Je vous le donne au cas ou il serait utile à d'autres membres:
    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
     
    function NextButtonClick(CurPageID: Integer): Boolean; 
    var
    	Path: String;
      File: TStrings;
      i: Integer;
    begin
      i:= 6
      if curpageID=wpReady then
      begin
        if FSX then
        begin
          Path:= ExpandConstant('{userappdata}')+'\Microsoft\FSX\' + 'dll.xml';
          File:= TstringList.Create;
          File.loadFromFile(Path);
          if File[7] <> '                <Name>CPS</Name>' then
          begin 
            File.SaveToFile(Path +' before_CPS.xml');
            File.Insert  (i,'       <Launch.Addon>');
            File.Insert(i+1,'              <Name>CPS</Name>');
            File.Insert(i+2,'              <Disabled>False</Disabled>');
            File.Insert(i+3,'              <ManualLoad>False</ManualLoad>');
            File.Insert(i+4,'              <Path>CPSModulesStart.dll</Path>');
            File.Insert(i+5,'       </Launch.Addon>');
            File.SaveToFile(Path);
            File.Clear;
          end;
       end;
    end;
    Encore merci

    Cordialement
    Pierre

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

Discussions similaires

  1. [Débutant] Ecrire dans un fichier xml existant en c#
    Par chemsoun dans le forum ASP.NET
    Réponses: 1
    Dernier message: 25/01/2015, 10h35
  2. [XML] SimpleXML écrire dans un fichier XML existant
    Par nina.b dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 04/09/2009, 11h06
  3. Ecrire une URL dans fichier XML
    Par lpwsso dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 24/08/2009, 15h00
  4. Réponses: 6
    Dernier message: 05/02/2008, 22h52
  5. [DOM] Ajouter des nouveaux élements depuis un nouveau fichier dans un fichier XML existant
    Par nettynet dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 17/10/2007, 08h07

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