Je travaille depuis quelques temps sur un nouvelle extension : Advanced XML.
Présentation
C’est un parseur d’XML beaucoup plus puissant et avancé (d’où le nom) que celui intégré à Game Develop. En effet, il sera capable de lire toutes sortes de fichiers XML et pas seulement ceux qui sont écrit avec GD. Il n’y a donc plus aucune limite et on peut tout à fait lire des fichiers comme ci-dessous.
Le principe de fonctionnement est basé sur des références, sortes d’étiquette placées sur les balises et autres éléments du fichier XML. En fait, vous créez une référence sur un élément du fichier pour pouvoir accéder à son contenu.
Possibilités offertes :
Peut lire toute sorte de fichiers XML
Peut lire les balises et leurs attributs
Peut lire des fichiers présentant des balises de même nom (comme dans l’exemple ci-dessous) : possibilité de parcourir facilement les balises
Peut lire les texte entre balises (peut en théorie lire du HTML par exemple)
Peut lire les commentaires
Peut ouvrir, modifier, puis sauvegarder le fichier, et en créer de nouveaux
Un peu plus complexe que le parseur intégré à GD
Exemple :
<test>
<infos>
<version major="1" minor="2"/>
</infos>
<element param="un texte"/>
<element param="un autre texte"/>
<element param="encore"/>
<element param="toujours"/>
</test>
[attachment=0]events.png[/attachment]
Ce code affichera sur la scène :
Cela serait pratique. Dans certains cas pour les sauvegardes mais surtout pour inclure différentes langues (quoi que c’est actuellement faisable aussi ^^). Beau boulot comme d’habitude en tout cas.
Très bonne initiative
Seul bémol que je vois pour l’instant, je pense qu’il faudrait plutôt nommer l’extension AdvancedXML
Les textes des actions/conditions sont un peu flous aussi. Enfin, comme je connais TinyXML ça va, mais j’imagine que c’est pas forcément ultra clair pour d’autres personnes. Ça va être aussi surement assez difficile de trouver de meilleurs formulations, mais peut être que cela peut être quand même amélioré :
Genre, au lieu de : Créer la référence “firstElement” (chemin : “test”) depuis l’élement “root”
Je verrai bien quelque chose du genre : Charger le sous élément “test” de “root” dans la référence “firstElement”
Le choix du nom pour GetAttributeString est très bien.
Enfin pour le moment ça reste du détail, bon courage pour la suite et beau boulot comme d’hab en effet
Tu as raison, j’allais justement demander comment formuler les conditions/actions (c’est pas toujours facile). Par contre, on peut taper un chemin dans cette action, donc je peux pas mettre “le sous-élément” (on peut aussi mettre … pour récupérer le parent, * pour récupérer le 1er sous enfant, et on peut les formuler en chemin → Exemple : “…/*” qui récupère le 1er enfant du parent).
J’ai téléchargé, décompressé dans le SDK, ouvert et recompilé sans soucis, et testé de même sans soucis : Ça marche très bien.
Très intéressant en effet, c’est en tout cas toujours plus sympa que le support limité présent actuellement dans GD.
Les sources de l’extension m’ont l’air très propres et concises, je pourrai sans doute l’intégrer de façon officielle dans GD par la suite.
Ça pourrait en effet devenir un extension “officielle” si 4ian le souhaite, surtout qu’elle est assez légère.
EDIT : S’il y a un passage de code mal expliqué, n’hésite pas à me demander.
Je pense que ça reste assez technique et donc pas forcément évident pour n’importe qui, dommage que tu n’ai pas inclus l’exemple d’ailleurs.
J’ai reparcouru ça rapidement, c’est bien réalisé comme toujours, j’intégrerai surement ça à la prochaine version, vu que les sources sont très concises ce sera facilement maintenable
Bonne initiative pour le wiki
@4ian, tu pourras inclure l’extension dans la prochaine version de Game Develop, par contre, télécharge la dernière version depuis GitHub (si tu as besoin de faire des adaptations pour la prochaine GDL, tu peux les commiter sur un fork puis faire un pull request).
Je n’ai pas encore testé (Manque de temps à la c**) mais ôtes-moi un doute : on peut créer une liste de données ?
Par exemple, on a les fichiers de sauvegardes distincts, et un autre qui contient les noms de ses fichiers (pour pouvoir les afficher en jeu et en choisir un à charger).
Je m’explique : pour le moment, pour permettre plusieurs sauvegardes au joueur et que celui puisse choisir laquelle charger sans passer par la fenêtre moche (désolé 4ian) de sélection d’un fichier, cela donne un évènement lourd et complexe à manipuler (suppression d’une sauvegarde par exemple).
Si j’ai bien compris, ton extension permettrait de palier à cela ?
Désolé pour l’orthographe et les tournures de phrases. Il est tard (ou tôt d’ailleurs) et je commence à fatiguer. Je vérifierai tout ca plus tard.
J’ai pas vraiment compris ce que tu as dit, mais, à titre de comparaison, l’extension est capable d’écrire un fichier HTML, et de le lire (mais c’est pas le plus simple).
Bonjour,
J’ai lu le wiki sur la lecture d’un fichier XML (extension XMLAvancée)
Ca part plutôt bien (on apprend comment se balader dans l’arborescence d’un fichier XML (e: charger un élément dans une référence, Aller sur l’élément suivant). Parfait!
MAIS on dirait que l’article est tronqué… Rien sur la récupération de la VALEUR de l’élément lui même !!!
Et pourtant, quand on parse un fichier XML, c’est généralement pour récupérer la valeur qui se trouve entre une balise ouvrante et une balise fermante… C’est rarement la découverte de la structure du fichier XML lui même (Balise, Texte, Commentaire). Et là… mystère… Quelle action de GD dois-je utiliser pour récupérer ces VALEURS ???
J’ai aussi regardé dans la directory d’exemples de GD… Mais je n’ai trouvé qu’un exemple pour créer un fichier XML (qui marche très bien d’ailleurs)
Suis-je le seul à vouloir parser/lire des valeurs se trouvant dans un fichier XML dont je connais la structure à l’avance ?
Ou alors j’ai VRAIMENT raté un truc quelque part (bien possible )
Toute aide (explication?, bout de code? lien vers un bout de doc?) serait la bienvenue…
Cordialement,
Damien.
Bonjour,
Pour que ma question soit peut être plus clair…
l’article du wiki sur la lecture de fichiers XML http://wiki.compilgames.net/doku.php/fr/gdevelop/articles/advancedxml/read parle de:
“Afin d’accéder au contenu de l’attribut “version” de la balise , nous devons charger cet élément dans une référence, cette dernière nous permettra alors d’accéder au contenu même de la balise”
Je suis intéressé par la 2ième partie de la phrase “…accéder au contenu même de la balise”
Par exemple dans le petit XML de l’article, il y a une balise qui contient 2 attributs nom=“durand” age=25"
Quelles sont les actions GD à utiliser pour récupérer la valeur (“25”) du 2ième attribut (“age”) de la balise ??
Hum…
Apparemment il faut être tombé dans la marmite de GD quand on était tout petit pour se servir du “Advanced XML” pour parser/lire des valeurs…
En attendant qu’une bonne fée se penche sur le berceau d’Advanced XML, je vais retourner au bon vieux “Basic XML” avec son mono attribut (“texte” ou “Value”) par balise.
C’est dommage… Comme je l’avais dit dans mon premier message “ça partait bien” cet “Advanced XML” au moins pour créer un fichier XML… Mais ne pas pouvoir simplement lire une valeur d’un fichier XML que l’on a pourtant créé avec l’Advanced XML de GD… Comment vous dire…
Cela dit, étant donné que le “Basic XML” fonctionne parfaitement et est TRES simple à utiliser, je comprends tout à fait qu’il y ait d’autres priorités (ex: GD V5) qu’Advanced XML…
A+, Cordialement,
Damien.
Salut ! Je pense surtout que très peu de gens s’en servent ! J’ai vu ton post mais je n’ai jamais eu l’occaz d’utiliser cette extension… Je pensais m’en servir mais le basic XML a été amplement suffisant pour tous les systèmes de sauvegardes ou de modding que j’ai pu faire.
Peut-être qu’une âme charitable verra ton post… Sinon essaies de passer poser la question sur le chan discord, on a pas mal d’utilisateurs qui sont très peu actifs sur le forum et préfèrent l’interactivité de discord pour les questions en live.
Merci Kink pour ta réponse rapide.
Comme d’hab (je ne sais pas sur quelle planète j’habite…mais j’ai TOUJOURS 1 ou 2 outils/apps de retard…), je ne savais même pas ce qu’était ‘discord’
Je me suis créé un compte (comme sur ce forum, toujours ‘Damien74’ comme nom d’utilisateur…)
A partir de maintenant, quand j’aurai une question qui demande de l’interactivité, je passerai désormais par Discord…
Encore merci, A+
Damien.
Faut pas déserter le forum pour autant ! Dans l’absolu si personne n’est apte à répondre sur discord, le forum est plus approprié : 1) les infos ne se perdent pas au fil du temps et 2) Sur discord tu n’interroges que les membres présents/actifs sur le chan.