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 =/
#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 =)

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 :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

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 :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

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é. :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

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
:mrgreen:

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

Posté : dim. 09 févr. 2020 18:26
par Tlem
Ha oui. J'avais zoublié. :wink:

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 :

Image

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)
Next

Func 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)
EndIf
Next
 

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.