[R] Lire Fichier XML puis mettre en variable.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Flop
Niveau 3
Niveau 3
Messages : 48
Enregistré le : lun. 20 oct. 2008 16:48
Status : Hors ligne

[R] Lire Fichier XML puis mettre en variable.

#1

Message par Flop »

Bonjour à tous,

J'aimerais mettre en variable des donnes d'un fichier xml, voici pour exemple une partie du fichier XML

Code : Tout sélectionner

<plugin plugin-id="{DEF95029-8893-4960-B0E5-7EAC4325E0E3}" enabled="True">
            <plugin-properties>
                <plugin-property name="checkupdate">no</plugin-property>
                <plugin-property name="showlayerandtext">no</plugin-property>
                <plugin-property name="writedebuglog">no</plugin-property>
                <plugin-property name="choixplayer">C:\playerc.exe</plugin-property>
                <plugin-property name="parametres">/fullscreen /play /close</plugin-property>
                <plugin-property name="delayfanart">2</plugin-property>
                <plugin-property name="fanartopacity">5</plugin-property>
                <plugin-property name="texttodiplay">CHARGEMENT EN COURS</plugin-property>
                <plugin-property name="fonttype">arial black</plugin-property>
                <plugin-property name="fontsize">40</plugin-property>
                <plugin-property name="thicknessofthelayer">5</plugin-property>
            </plugin-properties>
        </plugin>
 
J'aimerais mettre en variable la valeur de checkupdate, showlayerandtext, writedebuglog ....

merci d'avance de votre aide.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#2

Message par Tlem »

Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Flop
Niveau 3
Niveau 3
Messages : 48
Enregistré le : lun. 20 oct. 2008 16:48
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#3

Message par Flop »

je viens d'essayer pleins de code, mais je n'arrive à rien :evil: si qq comprends, un coup de main est bienvenue ! :wink:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#4

Message par Tlem »

Hummm, je vois que le lien que je vous ait donné ne permet pas de télécharger l'UDF _XMLDomWrapper.au3. :oops:

Dans ce cas, il est peut être possible de faire quelque chose comme ceci :

Code : Tout sélectionner

MsgBox(0, "", "checkupdate = " & _ReadMyXml("Test.xml", 'checkupdate'))
MsgBox(0, "", "fontsize = " & _ReadMyXml("Test.xml", 'plugin-property name="fontsize"'))


Func _ReadMyXml($sFile, $sSearchString)
    Local $Res
    $hfile = FileOpen($sFile, 0)

    ; Si le fichier n'existe pas, on retourne une chaine vide et on met @error à 1.
    If $hfile = -1 Then
        SetError(1)
        Return ""
    EndIf

    ; Lecture du fichier dans une variable.
    $File = FileRead($hfile)
    ; On récupère la position de la chaine à chercher.
    $StrPos = StringInStr($File, $sSearchString)
    ; Si le chaine n'existe pas on retourne 0
    If $StrPos = 0 Then Return 0
    
    ; Préparation de la lecture de la valeur.
    $StrPos = $StrPos + StringLen($sSearchString)

    ; Boucle pour positionner $StartSearch après la balise >
    While 1
        $StrPos += 1
        If StringMid($File, $StrPos, 1) <> ">" Then ExitLoop
    WEnd
    
    ; Boucle pour récupérer les caractère 1 à 1 jusqu'à la balise <
    While 1
        If StringMid($File, $StrPos, 1) = "<" Then ExitLoop
        $Res = $Res & StringMid($File, $StrPos, 1)
        $StrPos += 1
    WEnd
    ; On retourne la chaine de résultat.
    Return $Res
EndFunc   ;==>_ReadMyXml
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#5

Message par moutelous »

Bonsoir,

En cherchant sur le web on trouve cette url http://code.google.com/p/my-autoit/downloads/list afin de retrouver le fameux UDF "_XMLDomWrapper.au3" à la dernière version ....

A+
A+
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#6

Message par Tlem »

Avec _XMLDomWrapper.au3, je n'ai pas réussi à faire mieux que ceci :

Code : Tout sélectionner

#include <_XMLDomWrapper.au3>
#include <Array.au3>

$hXML = _XMLFileOpen("test.xml")

$Res = _XMLGetChildren('//plugin-properties')
_ArrayDisplay($Res,"")
Je n'ai pas trouvé de solution pour récupérer le nom de la valeur. :shock:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#7

Message par moutelous »

Bonjour,

Code : Tout sélectionner

#include "_XMLDomWrapper.au3"
#include <Array.au3>

$sFile = "Test.xml"
        
If FileExists($sFile) Then
    $ret = _XMLFileOpen ($sFile)
    $param2=_XMLGetValue('/plugin/plugin-properties/plugin-property')
    _ArrayDisplay($param2,"TEST")       
EndIf
Un peu simpliste ....mais bon ...

A+
A+
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#8

Message par Tlem »

C'est mieux. Il y à deux colonnes en moins, mais toujours pas le nom de la valeur. :D
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#9

Message par moutelous »

Bonjour TLEM

Je ne comprends pas ta remarque .... j'ai bien toutes les valeurs dans le tableau retourné

As tu bien chargé msxml ..?

A+
A+
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#10

Message par Tlem »

J'ai bien toutes les valeurs, mais ce que je veut dire c'est :
name="choixplayer" = C:\playerc.exe

Je pense que Flop souhaiterait avoir le nom de la valeur (en bleu) et la valeur (en rouge).
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#11

Message par moutelous »

OK ...

D'où ma remarque ...."... Un peu simpliste ..."

Si la structure du fichier XML reste la même ... l'ordre des valeurs correspondra toujours à l'ordre des noms.


A+
A+
Flop
Niveau 3
Niveau 3
Messages : 48
Enregistré le : lun. 20 oct. 2008 16:48
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#12

Message par Flop »

Tlem a écrit :J'ai bien toutes les valeurs, mais ce que je veut dire c'est :
name="choixplayer" = C:\playerc.exe

Je pense que Flop souhaiterait avoir le nom de la valeur (en bleu) et la valeur (en rouge).
C'est exactement ca Tlem, de plus comme indiqué dans mon premier post, c'est une partie du fichier xml il y a bcq d'autres lignes dans le ficheir xml !!
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#13

Message par moutelous »

Bonjour Flop,

J'ai bien compris, ...
mais si votre fichier xml ne change pas de structure , la deuxième valeur sera toujours "showlayerandtext" et la sixième sera toujours "delayfanart" ... à vous d'adapter le code pour faire correspondre cet ordre avec le tableau si tel est le cas.

A+
A+
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#14

Message par sylvanie »

Bonsoir,
si le fichier ne change pas de structure, pourquoi ne pas passer par un parseur taillé sur mesure via des expressions régulières et une création dynamique de variable via "assign" et y accéder via "eval"
► Afficher le texte
NB : le fichier input correspond au xml de test présenter au début
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Flop
Niveau 3
Niveau 3
Messages : 48
Enregistré le : lun. 20 oct. 2008 16:48
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#15

Message par Flop »

moutelous a écrit :Bonjour Flop,

J'ai bien compris, ...
mais si votre fichier xml ne change pas de structure , la deuxième valeur sera toujours "showlayerandtext" et la sixième sera toujours "delayfanart" ... à vous d'adapter le code pour faire correspondre cet ordre avec le tableau si tel est le cas.

A+
malheureusement le fichier xml change de structure !! il est différent chez chaque user, car il est fait en tps réel pas le log de config ! donc impossible d'adapter le tableau, il faut vraiment regarder a partir de cette ligne :

Code : Tout sélectionner

<plugin plugin-id="{DEF95029-8893-4960-B0E5-7EAC4325E0E3}" enabled="True">
c'est la seule chose de fixe !, en tout cas merci bcq pr votre aide, car sinon sur ce coup la j'arrive a rien ! :oops:
Flop
Niveau 3
Niveau 3
Messages : 48
Enregistré le : lun. 20 oct. 2008 16:48
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#16

Message par Flop »

Plus personne n'a d'idée ?? je me suis peut etre mal exprimé, le fichier xml de configuration n'est pas de structure fixe, par contre l'extrait de mon premier post lui est fixe, mais il ya bcq d'autre "config" de plugin dans ce fichier xml, c'est pour ca que je disais que seul cette ligne

Code : Tout sélectionner

<plugin plugin-id="{DEF95029-8893-4960-B0E5-7EAC4325E0E3}" enabled="True">
et plus particulierement les chiffres entres les accolades permet d'identifier la partie du fichier xml que je veux récuperer.

le premier code fonctionne a merveille si seulement le fichier xml ne contenait que ca, j'arrive a récuperer mes variables en faisant ca :

Code : Tout sélectionner

$=checkupdate = $param2[1]
merci d'avance de votre aide, je ne peux plus rien faire tant que ce problème n'est pas résolu ^^.
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#17

Message par moutelous »

Bonjour,
Flop a écrit :le premier code fonctionne a merveille si seulement le fichier xml ne contenait que ca
En effet avec un exemple de fichier c'est plus facile.

Il est difficile voir impossible de concevoir un parseur sans schéma ou sans une description exhaustive des types de balises ....

Pouvez vous donc joindre un schéma du fichier xml ou un fichier xml complet et représentatif ...

A+
A+
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#18

Message par Tlem »

+1 avec moutelous.

Sinon, est-ce que chaque nom de chaque valeur que vous voulez récupérer est unique ?
Est-ce que chaque nom de chaque valeur peut être connu à l'avance ?
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Flop
Niveau 3
Niveau 3
Messages : 48
Enregistré le : lun. 20 oct. 2008 16:48
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#19

Message par Flop »

voici mon fichier tel qu'il est. mais c'est un fichier qui peut changer selon chez qui meedio est installer.
Fichiers joints
configuration.xml
(77.04 Kio) Téléchargé 156 fois
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire Fichier XML puis mettre en variable.

#20

Message par Tlem »

Le problème dans votre exemple, c'est que la chaine <plugin plugin-id="{DEF95029-8893-4960-B0E5-7EAC4325E0E3}" enabled="True"> n'y est pas présente tout comme les noms : checkupdate, choixplayer, texttodiplay et surement les autres noms ... :cry:

Donc votre exemple n'est pas valable, ou alors vous ne nous avez pas donné toutes les explications.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre