Boucle et xml

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Boucle et xml

Message par MetalOS »

Salut tous le monde,

Pour un de mes nombreux projet je doit récupérer les données d'un fichier xml dont voici un exemple:

Code : Tout sélectionner

<markers time="16:50(UTC)" counter="10">
<marker id="d34efcab51953d0b818395d11a123d0c" datetime="2014-03-16 16:40:36" strength="4.56" lat="47.286192" lng="24.178260"/>
<marker id="65e19a4902592c0098cbbc477044f18a" datetime="2014-03-16 16:45:03" strength="5.83" lat="47.295484" lng="24.112949"/>
<marker id="8f777ed3e5847c5f144c5bf4a0276c54" datetime="2014-03-16 16:49:51" strength="19.21" lat="33.458911" lng="22.946880"/>
<marker id="f81868f2b40c2ac181724ebfda402542" datetime="2014-03-16 16:35:35" strength="3.79" lat="47.327942" lng="24.001179"/>
<marker id="fef7af47a5b4db3d4c806a397c1349a4" datetime="2014-03-16 16:35:35" strength="12.49" lat="47.385373" lng="24.256635"/>
<marker id="abeef7f87af537b0d6b521d4accdd39f" datetime="2014-03-16 16:35:35" strength="5.36" lat="47.309449" lng="24.289820"/>
<marker id="21f9e4c8fa9d871ee134c289a16be310" datetime="2014-03-16 16:36:33" strength="4.08" lat="47.368426" lng="24.269781"/>
<marker id="a6ee50c0d09dc356cd62403eb1eb8ef8" datetime="2014-03-16 16:36:33" strength="4.35" lat="47.429556" lng="23.875998"/>
<marker id="240c27b91df2e382e8cf2585a55d4f42" datetime="2014-03-16 16:39:03" strength="5.87" lat="47.303571" lng="24.167737"/>
<marker id="bac21947fa3522f6c7e8fa9a27fbbac5" datetime="2014-03-16 16:39:04" strength="4.51" lat="47.326119" lng="24.144336"/>
</markers>
Je doit récupérer le contenue de chaques "lat" et "lng" qui ce trouve dans chaque noeud "marker". Voici la portion de code que j'essaye d'utiliser pour lire ligne par ligne et récupérer les information qu'il me faut mais sans succès car je récupère uniquement les données du premier noeud et rien d'autre. J'avoue être vraiment perdu avec le xml.

Code : Tout sélectionner

If LoadXML(#xmlBlitz, "Blitz.xml", #PB_UTF8)
   If XMLStatus(#xmlBlitz) <> #PB_XML_Success
    Message$ = "Fichier XML Corrompu" + Chr(13)
    Message$ + "Message: " + XMLError(#xmlBlitz) + Chr(13)
    Message$ + "Ligne: " + Str(XMLErrorLine(#xmlBlitz)) + "   Caractere: " + Str(XMLErrorPosition(#xmlBlitz))
    MessageRequester("Erreur", Message$)
    
    End ;Sortie
   EndIf 
   
   *nodemarkers = XMLNodeFromPath(MainXMLNode(#xmlBlitz), "marker")    
   
   ExamineXMLAttributes(*nodemarkers)
    While NextXMLAttribute(*nodemarkers)  
      Lat$ = GetXMLAttribute(*nodemarkers, "lat")
      Lng$ = GetXMLAttribute(*nodemarkers, "lng")
    Wend
    Debug lat$ 
    Debug lng$
    
  EndIf
Merci d'avance pour votre aide.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Boucle et xml

Message par falsam »

J'avais déjà fait un code pour un de tes fichiers XML mais cette fois çi la demande est différentes car il s'agit d'extraire les attributs des différents nœuds de ton fichier.

Code : Tout sélectionner

Enumeration
  #XML
EndEnumeration

Procedure File_Load(*CurrentNode, CurrentSublevel)
  Protected *ChildNode, NodeName.s, NodeText.s, N.i
    
  If XMLNodeType(*CurrentNode) = #PB_XML_Normal  
    NodeName = GetXMLNodeName(*CurrentNode) ; Nom du noeud
    ;//NodeText = GetXMLNodeText(*CurrentNode) ; Valeur du noeud
  EndIf
  
  Select NodeName
    Case "markers"
      Debug GetXMLAttribute(*CurrentNode, "time")
                  
    Case "marker"
      Debug GetXMLAttribute(*CurrentNode, "lat") + " - " + GetXMLAttribute(*CurrentNode, "lng")
      
  EndSelect
      
  *ChildNode = ChildXMLNode(*CurrentNode)
  
  While *ChildNode <> 0
    File_Load(*ChildNode, CurrentSublevel + 1)      
    *ChildNode = NextXMLNode(*ChildNode)
  Wend 
  
EndProcedure

Procedure File_Open(XMLFile.s)
  If XMLFile <> ""
    If LoadXML(#XML, XMLFile)      
      If XMLStatus(#XML) <> #PB_XML_Success
        Message$ + "Message: " + XMLError(#XML) + Chr(13)
        Message$ + "Li : " + Str(XMLErrorLine(#XML)) + "   Car : " + Str(XMLErrorPosition(#XML))
        MessageRequester("Information", Message$)
      EndIf
    
      *MainNode = MainXMLNode(#XML)      
      If *MainNode
        File_Load(*MainNode, 0)
      EndIf 
    EndIf
    
    FreeXML(#XML)
  EndIf
EndProcedure

File_Open("Blitz.xml")
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Boucle et xml

Message par MetalOS »

oui j'ai essayer aussi de me baser sur l'exemple que tu m'avait donné sans trouver de solution. Une fois de plus merci falsam :wink:
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Boucle et xml

Message par MetalOS »

Je relance le sujet car je cherche à récupérer la valeur de "counter" de la première ligne de mon fichier xml dont voici un exemple:

Code : Tout sélectionner

<markers time="16:50(UTC)" counter="10">
<marker id="d34efcab51953d0b818395d11a123d0c" datetime="2014-03-16 16:40:36" strength="4.56" lat="47.286192" lng="24.178260"/>
<marker id="65e19a4902592c0098cbbc477044f18a" datetime="2014-03-16 16:45:03" strength="5.83" lat="47.295484" lng="24.112949"/>
<marker id="8f777ed3e5847c5f144c5bf4a0276c54" datetime="2014-03-16 16:49:51" strength="19.21" lat="33.458911" lng="22.946880"/>
<marker id="f81868f2b40c2ac181724ebfda402542" datetime="2014-03-16 16:35:35" strength="3.79" lat="47.327942" lng="24.001179"/>
<marker id="fef7af47a5b4db3d4c806a397c1349a4" datetime="2014-03-16 16:35:35" strength="12.49" lat="47.385373" lng="24.256635"/>
<marker id="abeef7f87af537b0d6b521d4accdd39f" datetime="2014-03-16 16:35:35" strength="5.36" lat="47.309449" lng="24.289820"/>
<marker id="21f9e4c8fa9d871ee134c289a16be310" datetime="2014-03-16 16:36:33" strength="4.08" lat="47.368426" lng="24.269781"/>
<marker id="a6ee50c0d09dc356cd62403eb1eb8ef8" datetime="2014-03-16 16:36:33" strength="4.35" lat="47.429556" lng="23.875998"/>
<marker id="240c27b91df2e382e8cf2585a55d4f42" datetime="2014-03-16 16:39:03" strength="5.87" lat="47.303571" lng="24.167737"/>
<marker id="bac21947fa3522f6c7e8fa9a27fbbac5" datetime="2014-03-16 16:39:04" strength="4.51" lat="47.326119" lng="24.144336"/>
</markers>
J'essaye avec RootXMLNode(#XML) mais je ne pense pas savoir comment l'utiliser exactement.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Boucle et xml

Message par falsam »

Mais heu!!! c'est le meme code que précédement en ajoutant

Code : Tout sélectionner

Debug GetXMLAttribute(*CurrentNode, "counter")
Remplace

Code : Tout sélectionner

Case "markers"
      Debug GetXMLAttribute(*CurrentNode, "time")
par

Code : Tout sélectionner

    Case "markers"
      Debug GetXMLAttribute(*CurrentNode, "time")
      Debug GetXMLAttribute(*CurrentNode, "counter")
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Boucle et xml

Message par MetalOS »

Alala... je croie que je t'en roulerais une si tu était devant moi.

Merci falsam

PS: Je ne suis pas OMO hein...
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Boucle et xml

Message par falsam »

MetalOS a écrit :Alala... je croie que je t'en roulerais une si tu était devant moi.
Il y a un univers virtuel ou j'ai l'apparence d'une femme. Alors pourquoi pas hein ? :D
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Boucle et xml

Message par MetalOS »

Non ont va s'arrêter la c'est bien lol
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Boucle et xml

Message par falsam »

MetalOS a écrit :Non ont va s'arrêter la c'est bien lol
Don't worry. Just a joke :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre