[..] Extraction de string dans un XML.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Stonilto
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mar. 16 févr. 2010 19:32
Status : Hors ligne

[..] Extraction de string dans un XML.

#1

Message 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 =)
australopitheque
Niveau 3
Niveau 3
Messages : 40
Enregistré le : sam. 07 juin 2008 15:42
Status : Hors ligne

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

#2

Message 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
GMib
Niveau 4
Niveau 4
Messages : 57
Enregistré le : sam. 23 janv. 2010 12:39
Status : Hors ligne

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

#3

Message 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)
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

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

#4

Message par GaRydelaMer »

Bonjour

Sauf que dans la dernière version (3.3.6.1) la fonction a été enlevé.
GMib
Niveau 4
Niveau 4
Messages : 57
Enregistré le : sam. 23 janv. 2010 12:39
Status : Hors ligne

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

#5

Message 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 ?
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

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

#6

Message 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 ...
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#7

Message par Tlem »

Sans doute que GaRydelaMer a cherché dans le fichier AutoIt3.chm au lieu d'ouvrir AutoIt.chm ou UDFs3.chm. :roll:
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
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#8

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

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

#9

Message 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).
Répondre