[R]Extraire les donnée d'un .xml --> listView

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Doctox
Niveau 1
Niveau 1
Messages : 4
Enregistré le : dim. 09 févr. 2020 13:31
Status : Hors ligne

[R]Extraire les donnée d'un .xml --> listView

#1

Message par Doctox »

Bonjour/Bonsoir,

J'aimerais comme l'indique le titre récupérer les donnée enregistrer dans un .XML pour ensuite les afficher dans une listview

j'ai essayé beaucoup de méthode venant d'un UDF :"XML.au3" . Malheureusement n'étant pas très doué, je galère pas mal et je n'arrive a rien récupérer, au bout de 2 jours dans les quels j'ai tourné en rond sur google et ce forum pour trouver des réponses , je m'avoue vaincu et vous poses la question.


Voici mon document XML : CommandeReception.xml
<listview>
        <item>
                <date>08/02/2020-18:44:02</date>
                <fournisseur>Xfournisseur</fournisseur>
                <refproduit>Xrefproduit</refproduit>
                <quantité>1</quantité>
                <chantier>Xchantier</chantier>
        </item>

</listview>
Et ici le code que j'ai commencé a faire mais qui ne donne rien =/
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <EditConstants.au3>
#include <GuiListView.au3>
#include <FileConstants.au3>
#include <WinAPIFiles.au3>
#include <Array.au3>
#include <File.au3>
#include "IncludeXml\XML.au3"


Global $FileReception = @scriptDir&"\CommandeReception.xml"
Global $columns = "Date|Fournisseur|Ref produit|Quantité|Chantier"


$Gui_Reception = GUICreate("Reception", 750, 700)
$ListView2 = GUICtrlCreateListView($columns, 50, 200, 650, 300, -1)

$info_xml = _XML_GetChildText($FileReception, "listview/")
$item1 = GUICtrlCreateListViewItem($info_xml, $ListView2)
GUISetState(@SW_SHOW)
While 1
        $nMsg3 = GUIGetMsg()
        Switch $nMsg3
                Case $GUI_EVENT_CLOSE
                        GUIDelete($Gui_Reception)

        EndSwitch
WEnd
 
(il y a beaucoup d'include car j'ai essayé pas mal de chose)

Je m'excuse d'avance si jamais j'ai loupé un sujet sur le fofo qui répondrais a cette question mais j'ai fait un bon tour et soit je n'ai pas compris les information soit elle n'allais pas dans le sens que je voulais.

Je vous remercie de m'avoir lue et espère avoir une réponse =)
Modifié en dernier par Doctox le dim. 09 févr. 2020 19:07, modifié 1 fois.

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5911
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Extraire les donnée d'un .xml --> listView

#2

Message par mikell »

Il ya des alternatives aux udf *xml
Il faudrait poster un exemple du VRAI xml et aussi du résultat attendu
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

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

Re: Extraire les donnée d'un .xml --> listView

#3

Message par Tlem »

Bonjour.
Si le XML est tel que présenté (9 lignes dont 5 lignes d'infos à récupérer), je simplifierais de la sorte (AMHA, c'est ce à quoi Mikel pensait :bisou: ) :

Code : Tout sélectionner

Global $XMLFile = FileRead("Test.xml")

$Date = GetXMLData("Date")
$Fournisseur = GetXMLData("fournisseur")
$RefProduit = GetXMLData("refproduit")
$Quantite = GetXMLData("quantité")
$Chantier = GetXMLData("chantier")

MsgBox(0,"", "Date = " & $Date & @CRLF & "Fournisseur = " & $Fournisseur & @CRLF & "RefProduit = " & $RefProduit & @CRLF & "Quantité = " & $Quantite & @CRLF & "Chantier = " & $Chantier)


Func GetXMLData($Tag)
	Local $TagData = StringRegExp($XMLFile,"(?i)<" & $Tag & ">(.*)<\/" & $Tag & ">", 1)
	If IsArray($TagData) Then
		Return $TagData[0]
	Else
		Return ""
	EndIf
EndFunc
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é".

Doctox
Niveau 1
Niveau 1
Messages : 4
Enregistré le : dim. 09 févr. 2020 13:31
Status : Hors ligne

Re: Extraire les donnée d'un .xml --> listView

#4

Message par Doctox »

Merci pour vos réponse, j'essaie de mettre en place ta solution "simple" et souvent les solutions les plus simple sont les meilleurs =)

Pour répondre quand même à Mikel : c'est plus où moins la seul chose qu'il y aura des items avec des dates, fournisseur, chantier, refproduit et quantité. Les uns au dessus des autres et je voudrais faire une gui où il s'afficherait tous pour faire un genre d'historique.

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

Re: Extraire les donnée d'un .xml --> listView

#5

Message par Tlem »

Est-ce que le fichier XML contiendra plusieurs Items ?
Si oui, alors il faut adapter la solution "simple". ^^
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é".

Doctox
Niveau 1
Niveau 1
Messages : 4
Enregistré le : dim. 09 févr. 2020 13:31
Status : Hors ligne

Re: Extraire les donnée d'un .xml --> listView

#6

Message par Doctox »

oui je suis entrain de l'adapter avec quelque chose de ce genre ?

Global $columns = "Date|Fournisseur|Ref produit|Quantité|Chantier"
Global $XMLFileCommandeReception = FileRead("CommandeReception.xml")

$Gui_Reception = GUICreate("Reception", 750, 700)
$ListView2 = GUICtrlCreateListView($columns, 50, 200, 650, 300, -1)

$DateReception = GetXMLData("Date")
$FournisseurReception = GetXMLData("fournisseur")
$RefProduitReception = GetXMLData("refproduit")
$QuantiteReception = GetXMLData("quantité")
$ChantierReception = GetXMLData("chantier")

$ItemReception = $DateReception&"|"&$FournisseurReception&"|"&$RefProduitReception&"|"&$QuantiteReception&"|"&$ChantierReception
$item1 = GUICtrlCreateListViewItem("", $ListView2)
For $i = 1 To $ItemReception[0]
                GUICtrlSetData($ListView2, $ItemReception[$i],"|")
Next
 
Mais je me tape une error sur
For $i = 1 To $ItemReception[0]
For $i = 1 To $ItemReception^ ERROR

Donc je farfouille autour =)

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5911
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Extraire les donnée d'un .xml --> listView

#7

Message par mikell »

C'est fait à l'arrache (le match a repris :mrgreen: ) mais c'est pour le concept

Global $columns = "Date|Fournisseur|Ref produit|Quantité|Chantier"
Global $XMLFileCommandeReception = FileRead("CommandeReception.xml")

$Gui_Reception = GUICreate("Reception", 750, 700)
$ListView2 = GUICtrlCreateListView($columns, 50, 200, 650, 300, -1)

$split = StringSplit( $XMLFileCommandeReception, "</item>", 1)
For $i = 1 to $split[0]

$DateReception = GetXMLData($split[$i], "Date")
$FournisseurReception = GetXMLData($split[$i], "fournisseur")
$RefProduitReception = GetXMLData($split[$i], "refproduit")
$QuantiteReception = GetXMLData($split[$i], "quantité")
$ChantierReception = GetXMLData($split[$i], "chantier")

$ItemReception = $DateReception&"|"&$FournisseurReception&"|"&$RefProduitReception&"|"&$QuantiteReception&"|"&$ChantierReception
$item1 = GUICtrlCreateListViewItem($ItemReception, $ListView2)

Next
 GuiSetState()


While 1
Wend


Func GetXMLData($txt, $Tag)
        Local $TagData = StringRegExp($txt,'(?i)<' & $Tag & '>([^<]+)', 1)
        Return (@error ? "" : $TagData[0])
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

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

Re: Extraire les donnée d'un .xml --> listView

#8

Message par Tlem »

Si dés le départ vous aviez indiqué qu'il y a plusieurs Items dans votre fichier XML, on aurait gagné un peut de temps. Pour le coup, Mikell avait sans doute anticipé. :roll:

Modifiez le code comme ceci :

Code : Tout sélectionner

Global $XMLFile = FileRead("Test.xml")

$aDate = GetXMLData("date")
$aFournisseur = GetXMLData("fournisseur")
$aRefProduit = GetXMLData("refproduit")
$aQuantite = GetXMLData("quantité")
$aChantier = GetXMLData("chantier")

For $i = 0 to Ubound($aDate)
MsgBox(0,"", "Date = " & $aDate[$i] & @CRLF & "Fournisseur = " & $aFournisseur[$i] & @CRLF & "RefProduit = " & $aRefProduit[$i] & @CRLF & "Quantité = " & $aQuantite[$i] & @CRLF & "Chantier = " & $aChantier[$i])
Next


Func GetXMLData($Tag)
	Local $aTagData = StringRegExp($XMLFile,"(?i)<" & $Tag &">(.*)<\/" & $Tag & ">",3)
	If IsArray($aTagData) Then
		Return $aTagData
	Else
		Return ""
	EndIf
EndFunc
Edit : Grillé par Mikell. :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é".

Doctox
Niveau 1
Niveau 1
Messages : 4
Enregistré le : dim. 09 févr. 2020 13:31
Status : Hors ligne

Re: Extraire les donnée d'un .xml --> listView

#9

Message par Doctox »

Merci a vous deux pour le temps que vous me consacrez =) désolé pour le manque d'infos

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5911
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Extraire les donnée d'un .xml --> listView

#10

Message par mikell »

@Thierry : For $i = 0 to Ubound($aDate) - 1
:mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

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

Re: Extraire les donnée d'un .xml --> listView

#11

Message par Tlem »

Ha oui. J'avais zoublié. :wink:
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