Exemple utilisation XML

Sujets variés concernant le développement en PureBasic
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Exemple utilisation XML

Message par wolfjeremy »

Salut,

Voici un petit exemple de base, pour l'utilisation de la lib xml.

Pour celà on utilise le fichier xml de clubic (un peut raccourci quand même) : (à enregistrer sous demo.xml)

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rss version="2.0">
<channel>
	<title>Clubic.com - Demos de Jeux</title>
	<link>http://www.clubic.com/</link>
	<description>Informatique et Multimédia</description>
	<language>fr</language>
	<copyright>Copyright 1997-2007, Cyrealis - Clubic.com</copyright>
	<lastBuildDate>Sat,  2 Jun 2007 18:51:54 +0200</lastBuildDate>
	<generator>Clubic</generator>
	<docs>http://www.clubic.com/divers/partner.php</docs>
	<ttl>20</ttl>
	<image>
		<title>Clubic.com</title>
		<url>http://www.clubic.com/style/images/logo-clubic.gif</url>
		<link>http://www.clubic.com/</link>
		<width>144</width>
		<height>60</height>
	</image>

 	<item>
 		<title>The Guild 2 : Pirates Of The European Seas - Démo jouable #1</title>
		<description>Suite au problème rencontré sur la première version de la démo jouable, les développeurs en ont proposé une autre. Le contenu est évidemment le même et il s'agit toujours de donner un aperçu du jeu.</description>
		<link>http://www.clubic.com/demo-jeux-video-7931-0-the-guild-2-pirates-of-the-european-seas.html</link>
		<guid>http://www.clubic.com/demo-jeux-video-7931-0-the-guild-2-pirates-of-the-european-seas.html</guid>
		<pubDate>Wed, 30 May 2007 17:17:54 +0200</pubDate>
		<category>Gestion > Economique</category>
	</item>
 	<item>
 		<title>Space Force : Rogue Universe - Démo jouable #1</title>
		<description>Plusieurs systèmes, différentes stations et quelques zones de saut sont disponibles dans cette démo jouable qui permet également de découvrir quelques quêtes et un certain nombre d'améliorations de votre vaisseau.</description>
		<link>http://www.clubic.com/demo-jeux-video-7298-0-space-force-rogue-universe.html</link>
		<guid>http://www.clubic.com/demo-jeux-video-7298-0-space-force-rogue-universe.html</guid>
		<pubDate>Tue, 29 May 2007 20:23:28 +0200</pubDate>
		<category>Sport & Simulation > Futuriste</category>
	</item>
 	<item>
 		<title>Tomb Raider Anniversary - Démo jouable #1</title>
		<description>Modeste (260 Mo), cette démo jouable nous permet d'incarner l'intrépide Lara Croft alors qu'elle se lance à la recherche d'un artefact en plein Pérou.</description>
		<link>http://www.clubic.com/demo-jeux-video-6871-0-tomb-raider-anniversary.html</link>
		<guid>http://www.clubic.com/demo-jeux-video-6871-0-tomb-raider-anniversary.html</guid>
		<pubDate>Sat, 26 May 2007 00:33:54 +0200</pubDate>
		<category>Aventure > Action</category>
	</item>
 	<item>
 		<title>Dungeon Runners - Jeu complet</title>
		<description>Complètement gratuit, ce jeu de rôle massivement multijoueur nécessite tout de même la création d'un compte PlayNC pour aller avec l'installation de ce fichier. Toutes les démarches sont résumées (en anglais) sur <a href="https://secure.plaync.com/cgi-bin/plaync_account.pl" target=_blank>cette page</a>.</description>
		<link>http://www.clubic.com/demo-jeux-video-6159-0-dungeon-runners.html</link>
		<guid>http://www.clubic.com/demo-jeux-video-6159-0-dungeon-runners.html</guid>
		<pubDate>Fri, 25 May 2007 22:07:07 +0200</pubDate>
		<category>Jeux de rôles > Action</category>
	</item>
 	<item>
 		<title>Call for Heroes : Pompolic Wars - Démo jouable #2</title>
		<description>Un tout petit peu plus grosse que la précédente, cette seconde démo jouable nous permet de découvrir une autre partie du jeu en incarnant l'amazone.</description>
		<link>http://www.clubic.com/demo-jeux-video-7087-0-call-for-heroes-pompolic-wars.html</link>
		<guid>http://www.clubic.com/demo-jeux-video-7087-0-call-for-heroes-pompolic-wars.html</guid>
		<pubDate>Fri, 25 May 2007 22:00:30 +0200</pubDate>
		<category>Jeux de rôles > Action</category>
	</item>
 	<item>
 		<title>Pacific Storm 2 - Démo jouable #1</title>
		<description>Plusieurs missions d'entraînement sont disponibles dans cette démo qui propose de découvrir les aspects RTS et simulation du jeu sur deux cartes (Pearl Harbor et Hodds vs Bismarck).</description>
		<link>http://www.clubic.com/demo-jeux-video-7004-0-pacific-storm-2.html</link>
		<guid>http://www.clubic.com/demo-jeux-video-7004-0-pacific-storm-2.html</guid>
		<pubDate>Fri, 25 May 2007 21:46:44 +0200</pubDate>
		<category>Stratégie > Temps réel</category>
	</item>
 	<item>
 		<title>Colin McRae : DIRT - Démo jouable #1</title>
		<description>Un petit aperçu du jeu avec cette démo jouable permettant de découvrir trois types de courses sur trois circuits différents et avec trois véhicules différents (Mitsubishi Lancer Evo IX, buggy CORR classe 1 et Subaru Impreza).</description>
		<link>http://www.clubic.com/demo-jeux-video-7045-0-colin-mcrae-dirt.html</link>
		<guid>http://www.clubic.com/demo-jeux-video-7045-0-colin-mcrae-dirt.html</guid>
		<pubDate>Thu, 24 May 2007 12:09:12 +0200</pubDate>
		<category>Sport & Simulation > Auto-Moto & Rallye</category>
	</item>
 	<item>
 		<title>Attack On Pearl Harbor - Démo jouable #2</title>
		<description>Un peu plus de 140 Mo, c'est le poids de cette version de démonstration de Attack On Pearl Harbor.</description>
		<link>http://www.clubic.com/demo-jeux-video-7116-0-attack-on-pearl-harbor.html</link>
		<guid>http://www.clubic.com/demo-jeux-video-7116-0-attack-on-pearl-harbor.html</guid>
		<pubDate>Tue, 22 May 2007 17:26:25 +0200</pubDate>
		<category>Sport & Simulation > Vol</category>
	</item>
 	<item>
 		<title>Lost Planet : Extreme Condition - Démo jouable #2 - DirectX 10</title>
		<description>Deux missions sont au programme de cette version de démonstration de Lost Planet : Extreme Condition (DirectX 9).</description>
		<link>http://www.clubic.com/demo-jeux-video-8295-0-lost-planet-extreme-condition.html</link>
		<guid>http://www.clubic.com/demo-jeux-video-8295-0-lost-planet-extreme-condition.html</guid>
		<pubDate>Wed, 16 May 2007 07:59:33 +0200</pubDate>
		<category>Action > Divers</category>
	</item>
 	<item>
 		<title>Sam & Max Episode 6 : Bright Side Of The Moon - Démo jouable #1</title>
		<description>Un peu moins de 80 Mo, c'est le poids de cette version de démonstration du sixième épisode de Sam & Max appelé Bright Side Of The Moon.</description>
		<link>http://www.clubic.com/demo-jeux-video-7786-0-sam-max-episode-6-bright-side-of-the-moon.html</link>
		<guid>http://www.clubic.com/demo-jeux-video-7786-0-sam-max-episode-6-bright-side-of-the-moon.html</guid>
		<pubDate>Fri, 11 May 2007 11:53:01 +0200</pubDate>
		<category>Aventure > Enigme</category>
	</item>
</channel>
</rss>
Et voici le code purebasic pour l'exploité (utilise le débogeur pour afficher les informations) :

Code : Tout sélectionner

Global mainchild.l, nodechild.l

LoadXML(0, "demo.xml")

*node = XMLNodeFromPath(MainXMLNode(0), "channel/") ;On récupère le noeud global, channel contient toutes les informations qui nous intéressent.
mainchild = XMLChildCount(*node)-10 ;On compte le nombre de sous noeuds (item, image et information du site), on enlève 10 pour enlever les noeuds image et les informations sur le site.
Debug "MainChild : " + Str(mainchild)
Debug " "

*node = XMLNodeFromPath(MainXMLNode(0), "channel/item") ;On récupère les noeud item
nodechild = XMLChildCount(*node) ;On compte le nombre de noeud item que contient le fichier xml
Debug "NodeChild : " + Str(nodechild)
Debug " "

For i=1 To mainchild ;On boucle le nombre de noeud item trouvé

  For h=1 To nodechild ;On boucle avec le nombre de sous noeud que contient chaque item
    *child = ChildXMLNode(*node, h) ;On récupère un par un les sous noeud du noeud item
    Debug GetXMLNodeName(*child) + " : " + GetXMLNodeText(*child)
  Next
  Debug " "
  *node = NextXMLNode(*node) ;On passe au noeud item suivant.

Next
Voilà, le code n'est surement pas parfait, mais c'est pour montré les bases.
(Surtout qu'il n'y a pas de doc française pour le moment)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

c'est intéressant ça merci ! mais je ne sais pas pourquoi je n'arrive pas a utiliser ton exemple sur la liste Xml de l'emulateur Mame.
télécharger mame ici : http://mamedev.org/releases/mame0116b.exe
décompresser le et une fois décompresser en ligne de commande faire
mame.exe -listxml >mame.xml
ça vas créer le fichier xml contenant les données (27Mo)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

@typhoon,
histoire d'unicode/utf-8 peut-être ?
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Flype a écrit :@typhoon,
histoire d'unicode/utf-8 peut-être ?
a oui peut-être.... je vais chercher de ce côté...merci pour la piste ! :p
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

apparemment non en fait.

plutot une histoire d'interpretation des blocs <!DOCTYPE> et <!ELEMENT>

essaye de couper le bloc doctype depuis notepad. et reessaye pour voir...
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

j'ai trouvé un code sur le forum anglais qui permet de lire le fichier...

Code : Tout sélectionner

file$ = "mame.xml"

Procedure ShowNode(label$, *node)
; Display node attributes and text
Protected tab$ = Space(4), text$
If *node
  Debug label$+":"
  Debug tab$+"Node name = "+GetXMLNodeName(*node)
  ExamineXMLAttributes(*node)
  While NextXMLAttribute(*node)
    Debug tab$+XMLAttributeName(*node)+" = "+XMLAttributeValue(*node)
  Wend
  text$ = GetXMLNodeText(*node)
  text$ = Trim(ReplaceString(text$, #CRLF$, " "))
  Debug tab$+"Node text = "+text$
  Debug tab$+"Child nodes = "+Str(XMLChildCount(*node))
EndIf
EndProcedure

tree = LoadXML(#PB_Any, file$)
Debug "Tree = "+Str(tree)
status = XMLStatus(tree)
Debug "Status = "+Str(status)
If status=0
  *node = MainXMLNode(tree)
  While *node
    ShowNode("Parent", *node)
    For child = 1 To XMLChildCount(*node)
      *child = ChildXMLNode(*node, child)
      ShowNode("Child "+Str(child), *child)
;       For grandchild = 1 To XMLChildCount(*child)
;         *grandchild = ChildXMLNode(*child, grandchild)
;         ShowNode("Grandchild "+Str(grandchild), *grandchild)
;       Next grandchild
    Next child
    *node = NextXMLNode(*node)
  Wend
  FreeXML(tree) 
EndIf
End
me reste plus qu'a comprendre comment ça marche pour ne lire que les information qui m'intéresse :P
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

c'est tout l'interet du xml :wink:
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Flype a écrit :c'est tout l'interet du xml :wink:
lolllllllllll j'avoue que j'ai eu plusieurs formation sur le XML..
mais je n'ai jamais comprit l'intérêt de cette structuration.
Le seul interêt c'est que visuellement on peut modifier les données a la main..mais personne ne fait ça ...le XML finalement prend beaucoup, beaucoup plus de place qu'une structure plus primaire...
A si le seul interet est le melange avec le html qui donne le Xhtml mais sinon ...
:P
Et comme je n'ai jamais pratiqué apres mes formations... ba j'avoue que je nage un peu ... ;)
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Thyphoon a écrit : A si le seul interet est le melange avec le html qui donne le Xhtml mais sinon ...
Le XHTML n'a rien a voir avec le xml... c'est juste l'évolution du html (le html va être repris comme standart, mais le xhtml va continuer à évoluer)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

wolfjeremy a écrit : Le XHTML n'a rien a voir avec le xml... c'est juste l'évolution du html (le html va être repris comme standart, mais le xhtml va continuer à évoluer)
Sauf erreur de ma part il me semble bien qu'on s'est inspiré de l'xml pour normaliser l'Html et que ça donne le xhtml, et qu'un parser XML marche tres bien pour de l'Xhtml. non ?
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

Thyphoon a écrit :Sauf erreur de ma part il me semble bien qu'on s'est inspiré de l'xml pour normaliser l'Html et que ça donne le xhtml, et qu'un parser XML marche tres bien pour de l'Xhtml. non ?
y'a pas d'erreur. Et c'est du à cette XML-standardisation que des balises comme <font> ont disparues
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Thyphoon a écrit : A si le seul interet est le melange avec le html qui donne le Xhtml mais sinon ...
Y'a de plus en plus de langages (ou méta-langages) qui se crée autour du XML : DTD, XSLT, XPath, XML Schema ...
Le XML permet d'avoir des fichiers de données structurées (comme une BDD), mais sans la contrainte d'avoir un serveur de BDD avec l'application créée.
Le XML est pratique pour "gérer" des petites BDD et peut être parsé facilement. C'ets plus propre qu'un fichier INI.

Mais tout dépend de nos besoins. La multitude de langage permet de choisir qui convient le mieux :D

Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

minirop a écrit : y'a pas d'erreur. Et c'est du à cette XML-standardisation que des balises comme <font> ont disparues
Il me semble qu'en vérité la disparition de <font> c'est tout simplement qu'il y en avait tout simplement plus besoin grace au CSS
lionel_om a écrit : Y'a de plus en plus de langages (ou méta-langages) qui se crée autour du XML : DTD, XSLT, XPath, XML Schema ...
Le XML permet d'avoir des fichiers de données structurées (comme une BDD), mais sans la contrainte d'avoir un serveur de BDD avec l'application créée.
Le XML est pratique pour "gérer" des petites BDD et peut être parsé facilement. C'ets plus propre qu'un fichier INI.

Mais tout dépend de nos besoins. La multitude de langage permet de choisir qui convient le mieux :D

Lio
Oui c'est sur ..mais j'avoue que j'ai du mal a m'y mettre au XML... J'arrive jamais a faire quelques choses de simple.... alors que pour structurer des données plusieurs tableau sous forme de CSV qu'on peut croisé c'est largement plus simple je trouve...

J'ai toujours pas réussi a faire en sorte de sortir de mon fichier mame.xml, des paramètres bien précis, comme le nom, la date etc...
Répondre