Page 2 sur 2
Re: [..] Lire Fichier XML puis mettre en variable.
Posté : jeu. 11 déc. 2008 00:00
par moutelous
Tu m'a devancé TLEM.... J'étais en train de rédiger exactement le même message ..
Ceci dit, Flop, est ce à dire que la liste exhaustive de tous les attributs, suivis de leurs valeurs, qui sont encadrés des balises "plugin-property" serait la solution ?
A+
Re: [..] Lire Fichier XML puis mettre en variable.
Posté : jeu. 11 déc. 2008 08:52
par Flop
Toutes mes excuses, je me suis effectivement trompé de fichier, celui que j'ai envoyé correspond a un fichier de configuration ou le plugin dont je veux récuperer les données n'est pas installé, voici un fichier ou il est installer, vous remarquer la similitude des 2 fichiers dans leurs constructions.
@ moutelous, si j'ai bien crompris ta question, je ne pense pas parcequ'il peut y avoir bcq de plugin installé qui enregistre tous leurs paramétres dans ce fichier, et le seul qui m'interresse est celui qui a cet id ; {DEF95029-8893-4960-B0E5-7EAC4325E0E3}
merci de votre aide, et désolé pr l'erreur de fichier
Re: [..] Lire Fichier XML puis mettre en variable.
Posté : jeu. 11 déc. 2008 21:55
par sylvanie
Bonsoir,
Toujours dans la piste regexp, voici une version qui gère l'activation des plugins :
► Afficher le texte
Code : Tout sélectionner
$file_in=FileOpen("configuration.xml",0)
If $file_in = -1 Then Exit 1
$name_var=""
$value_var=""
While 1
$line=FileReadLine($file_in)
if @error Then ExitLoop
$assign=StringRegExpReplace($line,'\A\s*<plugin-property name="([^"]+)">([^<]*)</plugin-property>\Z',"$1"&" == $2")
if @error Or @extended=0 Then
;tentaive de detection de plugin
$assign=StringRegExpReplace($line,'\A\s*<plugin plugin-id="(\{[^\}]+\})" enabled="([^"]+)">\Z',"plugid$1"&" == $2")
if @error Or @extended=0 Then ContinueLoop
EndIf
$tableau_assign=StringSplit($assign," == ",1) ; le double == est introduit comme séparateur pour le stringsplit
If $tableau_assign[0]<> 2 Then ContinueLoop
$name_var&=$tableau_assign[1]&@CRLF
$value_var&=$tableau_assign[2]
Assign($tableau_assign[1],$tableau_assign[2])
WEnd
FileClose($file_in)
$tableau_nom_var=StringSplit($name_var,@CRLF,1)
; à cause du dernier @crlf, on a une ligne vide, donc on décrémente le compteur max d'un
$tableau_nom_var[0]-=1
For $ind=1 to $tableau_nom_var[0]
ConsoleWrite( $tableau_nom_var[$ind]&" = "&Eval($tableau_nom_var[$ind])&@CRLF)
Next
Par contre il ne gère pas les variables poratnat le même nom, c'est la dernière qui a parlé qui gagne. Si le cas s'impose, il faudra faire un contôle des variables déjà existantes au moment des assignations.
Re: [..] Lire Fichier XML puis mettre en variable.
Posté : ven. 12 déc. 2008 23:11
par Flop
Merci pr cette réponse, mais je ne sais pas comment faire ensuite pour lire ce qui est écrit dans la "console", cad comment faire pour faire mes variables.
Une autre piste avec le wrapper ?
Re: [..] Lire Fichier XML puis mettre en variable.
Posté : ven. 12 déc. 2008 23:43
par Tlem
La console n'est là que pour affiché le résultat.
En réalité dans le code fournit par sylvanie, les variables sont tout simplement le nom de chaque valeur ...
C'est à dire :
- $checkupdate
- $showlayerandtext
- $writedebuglog
etc ...
Re: [..] Lire Fichier XML puis mettre en variable.
Posté : sam. 13 déc. 2008 16:06
par moutelous
Bonjour,
Un petit script, pas très joli, mais "fonctionnellement" efficace....
► Afficher le texte
Code : Tout sélectionner
#Include <String.au3>
#include <Array.au3>
;Ouverture du fichier
$file=FileOpen("configuration.xml",0)
If $file = -1 Then Exit 1
;Lecture du fichier
$texte = FileRead($file)
;Fermeture du fichier
FileClose($file)
;Extract de la partie désirée
$aRecords=_StringBetween($texte,"{DEF95029-8893-4960-B0E5-7EAC4325E0E3}","</plugin>")
;Extract des noms d'attributs et des valeurs dans un tableau (nom en ligne pair, valeur en ligne impaire)
$Result=StringRegExp($aRecords[0],'(?<=name=")[a-z]+|(?<=">)(.*)(?=</)',3)
_ArrayDisplay($Result, "Resultat")
A+
Re: [..] Lire Fichier XML puis mettre en variable.
Posté : lun. 15 déc. 2008 21:15
par Flop
nickel, merci bcq pour votre aide.
Re: [R] Lire Fichier XML puis mettre en variable.
Posté : ven. 30 oct. 2009 15:19
par sksbir
bonjour, le soucis est-il toujours d'actualité ?
A priori, la section {DEF95029-8893-4960-B0E5-7EAC4325E0E3} se trouve toujours dans
<configuration>...<plungins>....
je n'ai pas tout compris sur les fichier XML, mais grace à 2 topic ouverts sur ce forum, j'ai pu me dépatouiller pour faire proprement ce que je voulais,c'est à dire modifier le paramétrage de filezilla.
Voici un petit retour d'expérience pour résoudre le problème évoqué par flop :
► Afficher le texte
Code : Tout sélectionner
#Include <_XMLDomWrapper.au3>
#include <array.au3>
_SetDebug(True);show debug messages via console write
$sXmlFile ="configuration.xml"
If @error Then
MsgBox(4096, "File Open", "No file chosen")
Else
$oOXml = ""
$oOXml = _XMLFileOpen($sXmlFile)
EndIf
$nbnode=_XMLGetNodeCount("/configuration/plugins/plugin")
msgbox(0,"nbnodes",$nbnode & " ça, c'est le nombre de module 'plugin pluginid'")
For $i=_XMLGetNodeCount("/configuration/plugins/plugin") to 1 Step -1
$ATTRIB_ID=_XMLGetAttrib("/configuration/plugins/plugin[" & $i & "]","plugin-id")
If $ATTRIB_ID="{DEF95029-8893-4960-B0E5-7EAC4325E0E3}" Then
msgbox(0,"test","bingo")
; bon, ça c'est pour découvrir que le child s'appelle "plugin-properties"...
$CHILDTEST=_XMLGetChildText("/configuration/plugins/plugin[" & $i & "]")
_ArrayDisplay($CHILDTEST,"CHILDtext")
$nbnode_monplugin=_XMLGetNodeCount("/configuration/plugins/plugin[" & $i & "]/plugin-properties/plugin-property")
msgbox(0,"test","mon plugin a " & $nbnode_monplugin & " nodes")
for $j=_XMLGetNodeCount("/configuration/plugins/plugin[" & $i & "]/plugin-properties/plugin-property") to 1 Step -1
$mon_ATTRIB_NOM=_XMLGetAttrib("/configuration/plugins/plugin[" & $i & "]/plugin-properties/plugin-property[" & $j & "]","name")
$mon_ATTRIB_ITEM=_XMLGetValue("/configuration/plugins/plugin[" & $i & "]/plugin-properties/plugin-property[" & $j & "]")
MsgBox(0,"mon plugin","nom=" &$mon_ATTRIB_NOM & ",valeur=" & $mon_ATTRIB_ITEM[1])
Next
EndIf
Next