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. Problème parcours d'un fichier XML avec namespace
    Par ramroum1986 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 20/05/2010, 22h55
  2. [Inno Setup] Problème avec GetFileversion()
    Par Frimouss dans le forum Outils
    Réponses: 4
    Dernier message: 11/10/2008, 19h56
  3. Réponses: 0
    Dernier message: 04/02/2008, 14h57
  4. [inno setup] Probleme avec des fichiers.url et autres
    Par Razorbak dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 13/11/2007, 20h57
  5. Parcourir un XML avec namespace
    Par ujoodha dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 20/04/2006, 10h21

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