[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:
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:
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 :
Citation:
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.