[Extension] Advanced XML (fournie avec GD)

Bonjour à tous,

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 :

un texte un autre texte encore toujours

Téléchargement
L’extension est maintenant fournie avec Game Develop.
Code source sur Github : https://github.com/victorlevasseur/Advanced-XML

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 :slight_smile:
Seul bémol que je vois pour l’instant, je pense qu’il faudrait plutôt nommer l’extension AdvancedXML :slight_smile:

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

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

EDIT : L’extension est libre et est disponible sur son dépôt Github ici : https://github.com/victorlevasseur/Advanced-XML

Hé ! Très intéressant ! :slight_smile:
Ca pourrait peut-être être ajouté de manière natif à GD plus tard, non ?

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

Très intéressant en effet, c’est en tout cas toujours plus sympa que le support limité présent actuellement dans GD. :slight_smile:
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. :slight_smile:
EDIT : S’il y a un passage de code mal expliqué, n’hésite pas à me demander.

[size=150]Nouvelle version : 1.0RC[/size]

Vous pouvez tester la 1ère version publique de l’extension Advanced XML :
https://github.com/downloads/victorlevasseur/Advanced-XML/AdvancedXML-1.0RC-GDL-2.1.10682.zip
(Décompressez et copiez dans le dossier de Game Develop)

Pour vous aider, voici le 1er article du wiki qui explique les principes de base : http://www.wiki.compilgames.net/doku.php/game_develop/articles/advancedxml/basis

Pas d’avis ?

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 :slight_smile:
Bonne initiative pour le wiki :slight_smile:

J’ai commencé à écrire un article sur la lecture de fichier XML avec l’extension. Pouvez-vous me dire s’il est assez clair (surtout vers la fin temporaire) avec les références ?
http://www.wiki.compilgames.net/doku.php/game_develop/articles/advancedxml/read

@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).

[size=150]Nouvelle version (1.0)[/size]
Une nouvelle version de l’extension est disponible.

Nouveautés :

  • Nouvelles icônes pour les actions
  • Condition et expression pour tester le type d’élément d’une référence

Téléchargement :

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 :slight_smile: )
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 ??

Merci par avance,
Cordialement,
Damien.

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’ :slight_smile:
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.