1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : mai 2017
    Messages : 2
    Points : 1
    Points
    1

    Par défaut [inno setup] XML avec NameSpaces

    Bonjour,
    Afin d'automatiser l'installation d'un logiciel, je dois récupérer des informations contenu dans un ficher de configuration xml et les transférer dans un nouveau fichier xml formaté avec des namespaces. J'utilise pour cela l'objet CreateOleObject('Msxml2.DOMDocument'). J'arrive sans problème à travailler avec le fichier xml basique mais pas avec le nouveau.
    Voici à quoi ressemble ce fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="ASCII"?>
    <model:FastContext xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:model="model" officineName="ici" officineType="T" etabService="Autre" defaultSavingPath="C:\Users\Public\Documents" useDefaultSavingPath="true" dureeTimeoutConnexion="60" frequenceKeepAliveConnexion="10">
      <proxy host=""/>
      <license finess="finess" key="cle" posteId="posteid"/>
    </model:FastContext>
    Quelqu'un peut-il m'expliquer comment par exemple récupérer les valeurs d'"etabservice" et de posteid ?

    Voici la fonction (pour le moment incomplete) que j'aimerai utilisé:
    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
    50
    51
     
    Function RecupConfXml: Boolean;
    var
      confpath, fastpath: string;
      finess, service, posteid, ns: string;
      xmlconf, xmlfast, confbalise, fastbalise,nsmgr: variant;
     
    begin
      fastpath := 'c:\programdata\ici\la\fast.xml'; // emplacement du nouveau fichier de configuration
      confpath := ExpandConstant('{pf32}')+ '\la\app\data\conf\conf.xml'; //emplacement de l'ancien fichier conf.xml
     
      xmlconf := CreateOleObject('Msxml2.DOMDocument');
      xmlfast := CreateOleObject('Msxml2.DOMDocument');
     
      try
        xmlconf.async := False;
        xmlfast.async := False;
        xmlconf.load(confpath);
        xmlfast.load(fastpath);
        if (xmlconf.parseError.errorCode <> 0) then
          MsgBox('Le fichier conf.xml ne peut pas être analysé. ' + 
            xmlconf.parseError.reason, mbError, MB_OK)
        else if (xmlfast.parseError.errorCode <> 0) then
          MsgBox('Le fichier fast.xml ne peut pas être analysé. ' + 
            xmlfast.parseError.reason, mbError, MB_OK)
        else
          begin
            xmlconf.setProperty('SelectionLanguage', 'XPath');
            confbalise := xmlconf.selectSingleNode('//config/finess'); //recuperation de l'ancien code finess
            finess := confbalise.text;
            Log('le code finess récupéré est ' + finess);
            confbalise := xmlconf.selectSingleNode('//config/service'); //recuperation de l'ancien code service
            service := confbalise.text;
            Log('le nom du service récupéré est ' + service);
            confbalise := xmlconf.selectSingleNode('//config/posteId'); //recuperation de l'ancien code posteid
            posteid := confbalise.text;
            Log('le posteID récupéré est ' + posteid);
            xmlfast.setProperty('SelectionLanguage', 'XPath');
            ns := 'xmlns:model="model"';            //essai de declaration du namespace
            xmlfast.setProperty('SelectionNamespaces', ns);
            log('xmlfast.setProperty');
            fastbalise := xmlfast.selectSingleNode('/ns:FastContext/ns:etabservice');
            Log(fastbalise.text);
            fastbalise.text := service;
            xmlfast.save(fastpath);
          end;
      except
        MsgBox('Une erreur est apparue!' + #13#10 + GetExceptionMessage, mbError, MB_OK);
      end;
      Result := False;
    end;
    Voici le code erreur retourné avec ce code :
    msxml3.dll: Référence à un préfixe d'espace de noms non déclaré : 'ns'
    Merci pour toute l'aide que vous pourrez m'apporter.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : mai 2017
    Messages : 2
    Points : 1
    Points
    1

    Par défaut [RESOLU]

    j'ai trouvé la solution à mon problème. En fait, dans les fichiers xml avec prefix, les éléments que je recherchai sont des attributs. Voici la fonction qui me permet donc de transférer les valeurs d'une balise xml dans les attributs d'un fichier xml avec préfix:

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Function RecupConfXml: Boolean;
    var
      confpath, fastpath: string;
      xmlconf, xmlfast, confbalise, fastbalise: variant;
     
    begin
      Log('----- Transfert de la configuration de Fast ------');
      fastpath := ExpandConstant('{%USERPROFILE}') + '\appdata\roaming\la\fast.xml'; // emplacement du nouveau fichier de configuration
      Log('--> fastpath = ' + fastpath); 
      confpath := ExpandConstant('{pf32}')+ '\ici\conf\conf.xml'; //emplacement du fichier conf.xml
      Log('--> confpath = ' + confpath);
      xmlconf := CreateOleObject('Msxml2.DOMDocument');
      xmlfast := CreateOleObject('Msxml2.DOMDocument');
     
      try
        xmlconf.async := False;
        xmlfast.async := False;
        xmlconf.load(confpath);
        xmlfast.load(fastpath);
        if (xmlconf.parseError.errorCode <> 0) then
          MsgBox('Le fichier conf.xml ne peut pas être analysé. ' + 
            xmlconf.parseError.reason, mbError, MB_OK)
        else if (xmlfast.parseError.errorCode <> 0) then
          MsgBox('Le fichier fast.xml ne peut pas être analysé. ' + 
            xmlfast.parseError.reason, mbError, MB_OK)
        else
          begin
            xmlconf.setProperty('SelectionLanguage', 'XPath');
            xmlfast.setProperty('SelectionLanguage', 'XPath');
     
            // Définition du NameSpace
            xmlfast.setProperty('SelectionNamespaces', 'xmlns:xmi="http://www.omg.org/XMI" xmlns:model="model"');
     
            // Récuperation de la valeur de service
            confbalise := xmlconf.selectSingleNode('//config/service');
            fastbalise := xmlfast.selectSingleNode('model:FastContext');
            fastbalise.setAttribute('etabService', confbalise.text);
            Log('--> attribut etabservice : ' + fastbalise.getAttribute('etabService'));
     
            // Récuperation de la valeur de finess
            confbalise := xmlconf.selectSingleNode('//config/finess');
            fastbalise := xmlfast.selectSingleNode('model:FastContext/license');
            fastbalise.setAttribute('finess', confbalise.text);
            Log('--> attribut finess : ' + fastbalise.getAttribute('finess'));
     
            // Récuperation de la valeur de posteId
            confbalise := xmlconf.selectSingleNode('//config/posteId');
            fastbalise.setAttribute('posteId', confbalise.text);
            Log('--> attribut posteId : ' + fastbalise.getAttribute('posteId'));
     
            // Sauvegarde du fichier fast.xml        
            xmlfast.save(fastpath);
            Log('----- Fin du transfert de la configuration de Fast ------');
          end;
      except
        MsgBox('Une erreur est apparue!' + #13#10 + GetExceptionMessage, mbError, MB_OK);
      end;
      Result := True;
    end;
    j'espère que ce code pourra servir.

    Le sujet peut être clos.

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

Discussions similaires

  1. [Inno Setup] Recherche de tutoriels
    Par argon dans le forum Autres langages
    Réponses: 5
    Dernier message: 30/01/2006, 19h55
  2. [instalation] Modifier le language d'inno setup ou d'is tool
    Par méphistopheles dans le forum Installation, Déploiement et Sécurité
    Réponses: 2
    Dernier message: 26/01/2005, 21h59
  3. Delphi et inno setup
    Par drakes dans le forum Outils
    Réponses: 10
    Dernier message: 17/09/2004, 10h15
  4. [INNO SETUP][ORACLE] Installer le client Oracle avec Inno
    Par AnnSo dans le forum Bases de données
    Réponses: 11
    Dernier message: 19/08/2004, 16h21
  5. Bde Inno Setup et Test
    Par Fxg dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/07/2004, 14h35

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