Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
MetalOS
Messages : 1510 Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :
Message
par MetalOS » dim. 16/mars/2014 18:23
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.
falsam
Messages : 7324 Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :
Message
par falsam » dim. 16/mars/2014 19:31
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%
MetalOS
Messages : 1510 Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :
Message
par MetalOS » dim. 16/mars/2014 21:00
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
MetalOS
Messages : 1510 Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :
Message
par MetalOS » ven. 23/mai/2014 15:27
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.
falsam
Messages : 7324 Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :
Message
par falsam » ven. 23/mai/2014 21:54
Mais heu!!! c'est le meme code que précédement en ajoutant
Remplace
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%
MetalOS
Messages : 1510 Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :
Message
par MetalOS » ven. 23/mai/2014 23:47
Alala... je croie que je t'en roulerais une si tu était devant moi.
Merci falsam
PS: Je ne suis pas OMO hein...
falsam
Messages : 7324 Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :
Message
par falsam » sam. 24/mai/2014 2:26
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 ?
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%
MetalOS
Messages : 1510 Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :
Message
par MetalOS » sam. 24/mai/2014 11:34
Non ont va s'arrêter la c'est bien lol
falsam
Messages : 7324 Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :
Message
par falsam » sam. 24/mai/2014 11:37
MetalOS a écrit : Non ont va s'arrêter la c'est bien lol
Don't worry. Just a joke
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%