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.