Page 1 sur 2

[R] Lire Fichier XML puis mettre en variable.

Posté : sam. 06 déc. 2008 18:50
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.

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

Posté : dim. 07 déc. 2008 10:00
par Tlem

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

Posté : dim. 07 déc. 2008 14:47
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:

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

Posté : dim. 07 déc. 2008 22:04
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

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

Posté : dim. 07 déc. 2008 22:46
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+

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

Posté : lun. 08 déc. 2008 07:44
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:

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

Posté : lun. 08 déc. 2008 12:47
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+

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

Posté : lun. 08 déc. 2008 20:30
par Tlem
C'est mieux. Il y à deux colonnes en moins, mais toujours pas le nom de la valeur. :D

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

Posté : lun. 08 déc. 2008 20:40
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+

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

Posté : lun. 08 déc. 2008 20:56
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).

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

Posté : lun. 08 déc. 2008 21:12
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+

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

Posté : lun. 08 déc. 2008 21:14
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 !!

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

Posté : lun. 08 déc. 2008 21:27
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+

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

Posté : lun. 08 déc. 2008 21:46
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

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

Posté : lun. 08 déc. 2008 23:49
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:

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

Posté : mer. 10 déc. 2008 14:27
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 ^^.

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

Posté : mer. 10 déc. 2008 20:23
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+

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

Posté : mer. 10 déc. 2008 23:17
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 ?

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

Posté : mer. 10 déc. 2008 23:25
par Flop
voici mon fichier tel qu'il est. mais c'est un fichier qui peut changer selon chez qui meedio est installer.

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

Posté : mer. 10 déc. 2008 23:50
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.