Page 1 sur 1

[..] Extraction de string dans un XML.

Posté : mar. 16 févr. 2010 20:03
par Stonilto
Bonjour a tous et a toutes!

Je préfère directement poser la question car après plusieurs essai(non concluant) j'en viens donc a vous présenter mon problème :

Voila, je suis en train d'élaborer un petit programme de d'aide pour un jeux en ligne appelé aion.
Enfaite je cherche a créer une aide au "craft" qui nous permettrais de calculer le nombre d'objet nécessaire a la fabrication de cet objet.

En gros je m'explique : Je souhaite fabriquer un marteau.Pour ce marteau il faudrait 15lingots d'acier.
Mais pour 1 lingot il faudrait 1charbon + 1 minerai d'acier.
Donc là vous allez me dire, oui c'est facile la pas besoin d'un logiciel pour calculer sa...
Mais quand l'opération est a faire pour un objet qui nécessite plus de 5 fois cette opération sa deviens un peut long ^^.

Donc voila l'explication.Pour ce faire, je souhaite utiliser les fichiers xml fournis par le site : http://fr.aiondatabase.com/
exemple : http://fr.aiondatabase.com/xml/fr_FR/re ... 001599.xml

On peut voir grâce a ce xml, qu'on à besoin de "Mailles d\'orichalque (24)".
Donc voila j'aimerais extraire de ce xml tout ce qui est après "Matériaux nécessaires:" et ensuite de trier chaque matériaux, afin d'obtenir une liste, qui sera ensuite traiter puis décortiquer en chaque matériaux du dessous, etc etc...

Code : Tout sélectionner

#include <INet.au3>

$file = FileOpen("xmloriginal.xml", 2)
$file2 = FileOpen("xmlextrait.xml", 2)

$source = _INetGetSource("http://fr.aiondatabase.com/xml/fr_FR/recipes/xmls/155001599.xml")

FileWrite($file, $source)

$result = StringSplit($source, 'Matériaux nécessaires:',1)
$result = $result[1]

FileWrite($file2, $result)
 
Voila mais le soucis, j'ai rien du tout d'extrait...Donc je trouve sa assez bizarre.Merci de votre aide =)

Re: [..] Extraction de string dans un XML.

Posté : dim. 09 mai 2010 20:51
par australopitheque
ta base de départ est pas bonne car tu recherche "matériaux nécessaire:"
alors que dans ton xml les composant ce trouve inclus entre les balises components:

Code : Tout sélectionner

<components>
<item amount="113" id="152029175">Minerai Nex de bonne qualité</item>
<item amount="24" id="152020029">Mailles d'orichalque</item>
<item amount="5" id="152011064">Flux d'accessoire suprême de maître</item>
<item amount="4" id="152000910">Ether brillant</item>
<item amount="6" id="152000213">Minerai d'Orichalque brillant</item>
</components>
a mon avis il faut que tu te tourne vers udf _XMLDomWrapper.au3.
pour du petit xml ça passe mais pour les gros ça prend a mon avis trop de temps.(le itemlist.xml 1.9Mo).
petit exemple d'extraction :

Code : Tout sélectionner

#include <_XMLDomWrapper.au3>

$sXMLFile = "155001599.xml"

$result = _XMLFileOpen($sXMLFile)
if $result = 0 then Exit

Traverse()

Func Traverse($path = "/", $depth = 0)

    Local $indent = ""
    Local $aKeys[1], $aValues[1] ;Arrays used for attributes

    ;If current level is greater than zero
    If $depth Then
        ;Add tabs for indentation
        For $Z = 1 to $depth
            $indent &= @TAB
        Next
    EndIf

    $array = _XMLGetChildNodes($path)
    ;msgbox(4096,"path",$path)
    If $path = "/" Then $path = ""
    If IsArray($array) Then
        ConsoleWrite("!" & $indent & "Path: " & $path & @CRLF) ;Output indexed path in red
        For $X = 1 to $array[0]
            ConsoleWrite($indent & "[" & $X & "]: Element: " & $array[$X]) ;Output tag name
            _XMLGetAllAttrib($path & "/*[" & $X & "]",$aKeys, $aValues) ;Retrieve all attributes
            If NOT @ERROR Then
                ConsoleWrite(" - Attributes: ")
                For $Y = 0 to Ubound($aKeys)-1
                    ConsoleWrite($aKeys[$Y] & "=" & $aValues[$Y] & ", ") ;Output all attributes
                Next
            EndIf
            ConsoleWrite(@CRLF)

            Traverse($path & "/*[" & $X & "]", $depth+1)
        Next
        ConsoleWrite(@CRLF)
    EndIf
EndFunc

Re: [..] Extraction de string dans un XML.

Posté : lun. 10 mai 2010 18:57
par GMib
Pour ma part j'utiliserai _StringBetween que je trouve plus simple a utiliser que _XMLDomWrapper :

Code : Tout sélectionner

#include <String.au3>
$file = FileRead("xmloriginal.xml")
$compos = _StringBetween($file,'<components>','</components>')
$compos = $compos[0]
$amount = _StringBetween($compos,'amount="','" id=')
$comp = _StringBetween($compos,'">','</item>')

$txt = ''
For $i = 0 To UBound($amount) - 1
    $txt &= $amount[$i] & " " & $comp[$i] & @crlf
Next
MsgBox(0,"","Compo necessaire :" & @CRLF & $txt)

Re: [..] Extraction de string dans un XML.

Posté : mar. 11 mai 2010 15:10
par GaRydelaMer
Bonjour

Sauf que dans la dernière version (3.3.6.1) la fonction a été enlevé.

Re: [..] Extraction de string dans un XML.

Posté : mar. 11 mai 2010 17:54
par GMib
GaRydelaMer a écrit :Bonjour

Sauf que dans la dernière version (3.3.6.1) la fonction a été enlevé.
Je n'ai que la version 3.3.6.0 et _StringBetween est bien la, j'ai beau lire et relire les changelogs je ne voi rien qui parle d'enlever cette fonction.
Quelqu'un peu infirmer ou confirmer ?

Re: [..] Extraction de string dans un XML.

Posté : mar. 11 mai 2010 19:13
par sylvanie
bonjour
+1, j'ai la 3.6.1 et notre bonne vieille fonction est bien parmis nous ^^

je propose cependant une alternative en expression régulière
► Afficher le texte
NB : data.xml corresponds biensûr au données xml fournies ...

Re: [..] Extraction de string dans un XML.

Posté : mar. 11 mai 2010 21:24
par Tlem
Sans doute que GaRydelaMer a cherché dans le fichier AutoIt3.chm au lieu d'ouvrir AutoIt.chm ou UDFs3.chm. :roll:

Re: [..] Extraction de string dans un XML.

Posté : mar. 11 mai 2010 22:50
par jchd
Un enlèvement ? C'est gravissime, il faut derechef prévenir la police !

Non Gary, la fonction est bien accrochée sur son siège, dans String.au3.

Re: [..] Extraction de string dans un XML.

Posté : mer. 12 mai 2010 09:50
par GaRydelaMer
Re,

Oupppss désolé, j'avais lu ca sur le site anglais. Comme beaucoup se plaignaient de la fonction il était question de l'enlever (un rapt) et dans le forum on trouve un tas de fonction similaire, chacun le fait à sa sauce.

Pour ma décharge, je l'utilise pas j'utilise les regexp. Pour revenir au sujet, le fichier XML, il y a sur le net 2 UDF pour les traiter (créer, lire, écrire).