Page 1 sur 1
[R]Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 13:55
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 =/
(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 =)
Re: Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 14:44
par mikell
Il ya des alternatives aux udf *xml
Il faudrait poster un exemple du VRAI xml et aussi du résultat attendu
Re: Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 15:08
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
) :
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
Re: Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 15:33
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.
Re: Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 15:53
par Tlem
Est-ce que le fichier XML contiendra plusieurs Items ?
Si oui, alors il faut adapter la solution "simple". ^^
Re: Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 16:06
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 =)
Re: Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 17:06
par mikell
C'est fait à l'arrache (le match a repris
) 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 1WendFunc GetXMLData
($txt, $Tag) Local $TagData = StringRegExp($txt,'(?i)<' & $Tag & '>([^<]+)', 1) Return (@error ?
"" :
$TagData[0]) EndFunc
Re: Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 17:09
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é.
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.
Re: Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 17:13
par Doctox
Merci a vous deux pour le temps que vous me consacrez =) désolé pour le manque d'infos
Re: Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 18:24
par mikell
@Thierry : For $i = 0 to Ubound($aDate)
- 1
Re: Extraire les donnée d'un .xml --> listView
Posté : dim. 09 févr. 2020 18:26
par Tlem
Ha oui. J'avais zoublié.
Re: [R]Extraire les donnée d'un .xml --> listView
Posté : lun. 17 févr. 2020 17:54
par Doctox
Bonjour,
Désolé de remettre le sujet en avant mais après utilisation, j'ai un petit soucie avec des entrée "Fantôme", il y a des entrée avec juste les nom de Tag ("date" "nom fourni" ect...) mais rien a l’interrieur, je me demandais si il y avais moyen de l'obliger a prendre que si il y a une infos entre les tag ?
Peut être avec une combine du StringRegExp, mais j'avoue que je comprend rien aux différentes façons de l'utiliser, les "(.?)" j'ai du mal
Encore merci pour l'aide apporté =)
Re: [R]Extraire les donnée d'un .xml --> listView
Posté : lun. 17 févr. 2020 20:36
par Tlem
A partir de quand/quoi, considérez vous l'entrée comme une entrée fantôme ?
s'il manque un, deux, trois, ou tous les éléments ?
Quel code avez-vous adopté ?
Re: [R]Extraire les donnée d'un .xml --> listView
Posté : lun. 17 févr. 2020 21:29
par Doctox
alors exemple d'entrée fantôme :
<item>
<date></date>
<fournisseur></fournisseur>
<refproduit></refproduit>
<qté></qté>
<chantier></chantier>
</item>
exemple d'entrée complète :
<item>
<date>17/02/2020-10:08:32</date>
<fournisseur>Peltier</fournisseur>
<refproduit>dsfsdf</refproduit>
<qté>1</qté>
<chantier>Bourron</chantier>
</item>
J'ai opté pour cette version :
$splitRecep = StringSplit( $XMLFileCommandeEnCour, "</item>", 1)For $i = 1 to $splitRecep[0]$EncoursReception = "Reception"$DateReception = GetXMLData
($splitRecep[$i], "Date")$FournisseurReception = GetXMLData
($splitRecep[$i], "fournisseur")$RefProduitReception = GetXMLData
($splitRecep[$i], "refproduit")$QuantiteReception = GetXMLData
($splitRecep[$i], "qté")$ChantierReception = GetXMLData
($splitRecep[$i], "chantier")$ItemReception = $DateReception&"|"&$FournisseurReception&"|"&$RefProduitReception&"|"&$QuantiteReception&"|"&$ChantierReception&"|"&$EncoursReception$item1 = GUICtrlCreateListViewItem($ItemReception, $ListCommande)Func GetXMLData
($txt, $Tag) Local $TagData = StringRegExp($txt,'(?i)<' & $Tag & '>([^<]+)', 1) Return (@error ?
"" :
$TagData[0])EndFunc
Merci de m'accorder de votre temps =)
Re: [R]Extraire les donnée d'un .xml --> listView
Posté : lun. 17 févr. 2020 23:59
par Tlem
Vous ne répondez pas entièrement à mes questions. Du coup on va extrapoler. ^^
Cas N°1 : Rien que la date est vide => Entrée fantôme (peux être adapté à n'importe quelle autre variable si la date n'est pas le critère principal).
Code : Tout sélectionner
...
$DateReception = GetXMLData($splitRecep[$i], "Date")
If $DateReception = "" Then ContinueLoop
...
Cas N°2 : Tous les éléments sont vides => Entrée fantôme (sous entend que si un seul des éléments n'est pas vide alors l'entrée est valide).
Code : Tout sélectionner
...
$ChantierReception = GetXMLData($splitRecep[$i], "chantier")
If $DateReception & $FournisseurReception & $RefProduitReception & $QuantiteReception & $ChantierReception = "" Then ContinueLoop
...
Cas N°3 : Si un seul des éléments est vide => Entrée fantôme.
Code : Tout sélectionner
...
$ChantierReception = GetXMLData($splitRecep[$i], "chantier")
If $DateReception = "" Or $FournisseurReception = "" Or $RefProduitReception = "" Or $QuantiteReception = "" Or $ChantierReception = "" Then ContinueLoop
...
[/code2]
Re: [R]Extraire les donnée d'un .xml --> listView
Posté : mar. 18 févr. 2020 11:00
par Doctox
Bonjour,
Le cas N°2 répond entièrement a ma demande et j'avoue que maintenant que je le voie j'aurais pue rajouter cette condition moi même, je me suis pris le chou a tourner autour du "StringRegExp".
Merci =)
Re: [R]Extraire les donnée d'un .xml --> listView
Posté : mer. 19 févr. 2020 10:31
par Doctox
ReBonjour,
Nouvelle question, je vais essayer pour une fois d'être précis :
j'ai fait une pointeuse où chaque employés ce présente pointe, va travailler puis a la fin de journée re-viens, mets sur quel projet il a travaillé et combien de temps, puis pointe sa fin de journée. Je récupère sa dans un XML qui ressemble a sa pour 1 employé :
<item>
<date>18/02/2020</date>
<debut>15H35</debut>
<nomProjet1>boutet</nomProjet1>
<tempsProjet1>5H</tempsProjet1>
<fin>15H35</fin>
</item>
<item>
<date>19/02/2020</date>
<debut>15H35</debut>
<nomProjet1>StJames</nomProjet1>
<tempsProjet1>5H</tempsProjet1>
<nomProjet2>loti</nomProjet2>
<tempsProjet2>4H</tempsProjet2>
<fin>15H35</fin>
</item>
Jusque là tout vas bien, j'aimerais maintenant récupérer et les mettre ces infos dans une listview, jusqu'ici on est encore OK.
Mon problème est le suivant j'aimerais que projet 1 et projet 2 (il peux y avoir jusqu'a 5projets et temps de projets) soit dans la même colone mais a une ligne en dessous et la sa coince je vous fait un montage du rendu que j'aimerais avoir :
Edit : et pour être précis je voudrais trier les résultats en cliquant sur l'onglet, voila pourquoi j'aimerais que sa aille sur la ligne suivante
Est il possible d'avoir ce genre de rendu ? Si non, connaissez vous une solution qui m'aiderais a avancer ? car je stagne la dessus malheureusement =/
Edit 1 : voici le bout de code que je triture =)
$splitguillaume = StringSplit( $XMLFilePointeuseGuillaume, "</item>", 1)For $i = 1 to $splitguillaume[0]$guillaume = "Guillaume"$Dateguillaume = GetXMLData
($splitguillaume[$i], "date")$Debutguillaume = GetXMLData
($splitguillaume[$i], "debut")$NomProjet1guillaume = GetXMLData
($splitguillaume[$i], "nomProjet1")$NomProjet2guillaume = GetXMLData
($splitguillaume[$i], "nomProjet2")$TempsProjet1guillaume = GetXMLData
($splitguillaume[$i], "tempsProjet1")$Finguillaume = GetXMLData
($splitguillaume[$i], "fin")$Itemguillaume = $Dateguillaume&"|"&$Debutguillaume&"|"&$NomProjet1guillaume&@CR
&$NomProjet2guillaume&"|"&$TempsProjet1guillaume&"|"&$Finguillaume&"|"&$guillaume$item4 = GUICtrlCreateListViewItem($Itemguillaume, $ListPersonnel)NextFunc GetXMLData
($txt, $Tag) Local $TagData = StringRegExp($txt,'(?i)<' & $Tag & '>([^<]+)', 1) Return (@error ?
"" :
$TagData[0])EndFunc
Merci encore de prendre de votre temps pour mes problématiques =), je reste bien entendu disponible si jamais vous avez des questions et m'excuse si je n'ai pas été suffisamment claire.
Edit 2 : j'ai trouvé a force de trifouiller (je le donne si jamais quelqu'un en aurait besoins) :
$splitguillaume = StringSplit( $XMLFilePointeuseGuillaume, "</item>", 1)For $i = 1 to $splitguillaume[0]$guillaume = "Guillaume"$Dateguillaume = GetXMLData
($splitguillaume[$i], "date")$Debutguillaume = GetXMLData
($splitguillaume[$i], "debut")$NomProjet1guillaume = GetXMLData
($splitguillaume[$i], "nomProjet1")$NomProjet2guillaume = GetXMLData
($splitguillaume[$i], "nomProjet2")$TempsProjet1guillaume = GetXMLData
($splitguillaume[$i], "tempsProjet1")$Finguillaume = GetXMLData
($splitguillaume[$i], "fin")$Itemguillaume = $Dateguillaume&"|"&$Debutguillaume&"|"&$NomProjet1guillaume&"|"&$TempsProjet1guillaume&"|"&$Finguillaume&"|"&$guillaume$item4 = GUICtrlCreateListViewItem($Itemguillaume, $ListPersonnel)If $NomProjet2guillaume = Not Null Then $Itemguillaume2 = ""&"|"&""&"|"&$NomProjet2guillaume&"|"&""&"|"&""&"|"&"" $item5 = GUICtrlCreateListViewItem($Itemguillaume2, $ListPersonnel)EndIfNext
Re: [R]Extraire les donnée d'un .xml --> listView
Posté : mer. 19 févr. 2020 21:59
par Tlem
Bonsoir Doctox, merci de créer un nouveau sujet lorsque vous posez une nouvelle question.