Script inno setup et fichier xml

zebulon25 Messages postés 9 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 17 février 2010 - 13 févr. 2010 à 16:36
Zpierre451 Messages postés 2 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 19 février 2010 - 19 févr. 2010 à 18:09
Bonjour,

je suis en train de m'arracher les cheveux pour pouvoir lire ou modifier un attribut d'un nœud d'un fichier xml.

J'obtiens systématiquement l'erreur "exception le type ne correspond pas"

voici un exemple de fichier que je veux lire:
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<debut variable="toto" />
</root>


et le code que j'utilise sous inno setup pour lire l'attribut "variable"

[Code]
Const
XMLFileName = 'test.xml';

function NextButtonClick(CurPageID: Integer): Boolean;
var
XMLDoc, xmlNode , Node: Variant;
Attrib : Variant;

Path: String;
begin
Path := 'c:\temp\';

{ 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 }
xmlNode := XMLDoc.SelectSingleNode('root/debut');

xmlNode.attributes('variable').innertext := 'True';


{ Save the XML document }
XMLDoc.Save(Path + XMLFileName);
Result:=True;
end;

si quelqu'un ayant déjà utilisé inno setup pouvait m'aider, ce serai avec grand plaisir.

4 réponses

zebulon25 Messages postés 9 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 17 février 2010
15 févr. 2010 à 14:05
Je me réponds à moi même:

il faut utiliser la syntaxe suivante :

xmlNode := XMLDoc.SelectSingleNode('root/debut');
xmlNode.setAttribute['variable'] := 'true';

pour écrire l'attribut

ou

Variable := getAttribute['variable'] ;

pour lire la valeur de l'attribut.
0
Zpierre451 Messages postés 2 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 19 février 2010
15 févr. 2010 à 19:59
Bonjour,

J'utilise aussi innosetup et ce script m'interesse !

Pour résumer:

Je dois installer des fichiers d'un véhicule (un mod) dans le répertoire du jeu , jusque la pas de soucis inno me le met au bonne endroit, mais pour qu'il apparaisse dans mon jeu, je dois rajouter une ligne dans un fichier xml pour indiqué la position du véhicule sur la carte.

donc il faut que j'ouvre mon fichier xml qui est à un endroit bien précis
que je rajoute une ligne dans ce node :
<careerVehicles>
</careerVehicles>

et enfin enregistrer mon fichier.

Qu'elle serait le code pour le rajout d'une ligne dans un node ??

J'aimerais faire cette manipulation pour éviter au joueur de devoir rajouter cette ligne manuellement !

merci d'avance.
0
zebulon25 Messages postés 9 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 17 février 2010
17 févr. 2010 à 07:15
Bonjour,

Vous pouvez essayer ça:

avant, le fichier c:\temp\config.xml contient:

<root>
<carerVehicles>
</carerVehicles>
</root>

après :
<root>
<careerVehicles> <newVehicule>MaNouvelleVoiture</newVehicule>
</careerVehicles>
</root>


et voici le bout de code à ajouter dans la rubrique [code]:

[Code]
Const
XMLFileName = 'config.xml';

function NextButtonClick(CurPageID: Integer): Boolean;
var
XMLDoc, xmlNode , NewNode: Variant;

Path: String;
begin
Path := 'c:\temp\';

{ 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 }
xmlNode := XMLDoc.SelectSingleNode('root/careerVehicles');

{ Modify the XML document }
NewNode := XMLDoc.createElement('newVehicule');
xmlNode .appendChild(NewNode);
xmlNode .lastChild.text := 'MaNouvelleVoiture';


{ Save the XML document }
XMLDoc.Save(Path + XMLFileName);
Result:=True;
end;
0
Zpierre451 Messages postés 2 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 19 février 2010
19 févr. 2010 à 18:09
merci beaucoup ;) je vais essayer ca et je vous redit si ca marche ou pas ;)
0