AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Lire / Ecrire - Fichier XML

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
NVRB
Très bonne participation
avatar

Messages : 140
Localisation : Vexin Français
Projet Actuel :

MessageSujet: Lire / Ecrire - Fichier XML   Jeu 28 Juil 2011 - 17:48

Lire & Ecrire sur un fichier XML

Les fichiers ini c'est bien, mais c'est assez limité. Il n'y a pas la possibilité de créer des sections dans les sections et on ne peut ouvrir qu'un ini à la fois.
Les fichiers XML c'est mieux pour mon jeu dont les données sont souvent externe à l'executable.
Avec les fichiers XML, on peut stocker des données sous une structure élaboré avec des balises.
Les balises que j'utilise sont des des chaînes entre des crochets (<score>500</score>).

Exemple d'un contenu de fichier XML:
Spoiler:
 

J'ai donc élaboré des fonctions permettant de traiter ces fichiers.
Je sais qu'il existe une DLL permettant de traiter les fichiers XML mais elle est limité en rang.

On peut soit lire une donnée, soit remplacer une valeur dans une balise existante.

Le fichiers XML doivent respecter certaines contraintes :

  • L'utilisation des caractères §, #, <, > sont à proscrire. (Si vous souhaitiez utiliser le symbole # pour les retour à la ligne des chaînes, sachez que la fonction XML_lire détecte les retour à la ligne dans le fichier XML et ajoute les caractères # automatiquement).
  • Les balises ne doivent pas se chevaucher.
    Exemple:
    Spoiler:
     
  • Le nom d'une balise ne doit pas être séparé d'un espace avec les crochets.
    Exemple :
    Spoiler:
     
  • Les balises ne doivent pas contenir d'attributs comme <abc couleur="rouge"> (les élèments en rouge sont des attributs).
  • Les fonctions ne peuvent lire les données des balises au 1er rang.
    Exemple:
    Spoiler:
     
  • Le fichier ne doit pas être forcement au format XML (vous pouvez utiliser le format .txt si vous voulez).
  • La casse est respectée.


Il y quatre fonctions que j'ai créer pour utiliser ce format.

XML_charger(file)
Citation :
Pour utiliser un fichier XML, il faut le charger.
Cette fonction retourne le contenu du fichier formaté de façon à pouvoir être utilisé par les autres fonction; on peut donc considerer que cette fonction retourne l'identifiant du fichier. Vous avez la possibilité de charger autant de fichiers XML que vous souhaitez (vous n'êtes pas limité aux 32 fichiers ouvert maximum par les fonctions file_text_...).
La variable qui contient ce que retourne cette fonction je l'appelerais xml (super original gnii ).

Spoiler:
 



Je dois cependant vous définir ce que j’appellerais une clef.
Une clef, c'est comme pour les fichiers ini, sa identifie une valeur.
Mais dans un fichier XML, il y a des sections comparativement à un ini, mais il y a aussi des sous-sections.
Voici un exemple de fichier XML:
Spoiler:
 
Quelle est la clef de la valeur du score de Nicolas ?
Sa clef peut être assimiler à la balise score.
Mais comment différencié le score de Nicolas et de Sébastien ?
Dorénavant, quand vous spécifiez une clef, vous devez préciser toute les balises en amont de cette valeur.
Vous séparerez le nom des différentes balises par un slash (/).

Par exemple, si je veut relever le score de Nicolas, la clef est sauvegardes/Nicolas/score.
Pour lire la progression de l'histoire de Sébastien, la clef seras sauvegardes/Sebastien/progression_histoire



XML_lire(xml,clef,valdef)
Citation :

Une fois la fonction chargée dans la variable xml (vous n'êtes pas obligé de nommer cette variable xml, vous pouvez la nommer autrement) vous pouvez extraire des données.
Vous avez trois arguments :

  • xml: c'est la variables qui contient se qui a été retourné par la fonction XML_charger.
  • clef: c'est la clef de la valeur que vous souhaitez extraire. Lisez ci-dessus pour en savoir plus sur les clefs.
  • valdef: si une erreur devait survenir inopinément, la fonction retournera cette valeur. Cette valeur doit-être une chaîne.

Cette fonction peut-être utile pour determiner l'existence d'une balise, en effet, si la clef est introuvable, la valeur par defaut sera retournée.
Cette fonction retourne donc la valeur de la clef sous forme d'une chaîne.


XML_ecrire(xml,clef,val)
Citation :

Cette fonction remplace la valeur d'une clef par une que vous aurez définis. C'est l'équivalent de la fonction ini_write comparativement.
Il y a trois arguments :

  • xml: c'est la variables qui contient se qui a été retourné par la fonction XML_charger.
  • clef: c'est la clef de la valeur que vous souhaitez remplacer. Lisez ci-dessus pour en savoir plus sur les clefs.
  • val: c'est la valeur qui remplacera celle déjà présente dans la clef spécifiés. Cette valeur doit-être une chaîne.

La fonction retourne la variable xml modifiée.
Exemple:
Code:
 xml = XML_ecrire(xml,"sauvegardes\Nicolas\score","2500");


XML_sauvegarder(xml,file)
Citation :

Si vous avez opéré des modifications avec la fonction XML_ecrire, sachez que ces modifications sur le fichier ne seront prisent en compte uniquement quand vous aurez sauvegardé les modif'.
Il y a deux arguments:

  • xml: c'est la variables qui contient se qui a été retourné par la fonction XML_ecrire.
  • file: le fichier où seront enregistrés les données, il peut-être différent de celui qui a été chargé à l'origine. Attention: Le fichier concerné sera ecrasé.

Si la sauvegarde c'est déroulée correctement, la fonction retourne true, sinon, elle retourne false.

Je vous ai présenté les 4 fonctions opérant sur les fichiers XML. Ce n'est pas beaucoup, mais sa m'est très utile pour mon jeu.
Et comme rien ne vaut un exemple, je vous montre un code GML qui charge un fichier XML, qui lit la valeur d'une clef et ensuite l'affiche sous forme d'une boite de dialogue . Après, on modifie une valeur et ensuite on la sauvegarde.

fichier.XML:
Spoiler:
 

Code GML:
Spoiler:
 


Bon maintenant que j'ai décris les fonctions, je vous donne mes codes sources, en GML bien entendu.
Désolé pour la tonne d'explications donnée si-dessus sweat , mais j'aime bien que tout soit bien clair.
Je n'est pas la prétention d'être un génie en matière de GML, mais ces codes fonctionnent correctement.

Vous remarquerez, qu'il n'y a pas le principe de ouvrir/fermer un fichier. Ici, vous chargez le contenu d'un fichier XML dans une variable, et si vous avez fait des modifications à partir de cette variable, vous devez sauvegarder.


XML_charger
Spoiler:
 

XML_lire
Spoiler:
 

XML_ecrire
Spoiler:
 

XML_sauvegarder
Spoiler:
 

Voilà, c'est tout, mais si vous remarquez une erreur, ou une proposition d'amélioration, je suis tout ouï.

PS: Excusez-moi si il y a des fautes d'orthographes.

_________________
Projet actuel :


Dernière édition par NVR le Mar 28 Fév 2012 - 7:50, édité 7 fois
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Lire / Ecrire - Fichier XML   Jeu 28 Juil 2011 - 17:52

Eh ben ça promet :p

Reste plus qu'a faire un ptit gm6 pour montrer ce que ça donne et ce seras parfait !

_________________
                 
Revenir en haut Aller en bas
 
Lire / Ecrire - Fichier XML
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [résolu] Problème avec fichiers BKH
» A vos claviers les experts pour savoir comment changer une extension de fichier ha11
» [résolu]fichier ODT
» Méthode Doman "J'apprends à lire à mon bébé"
» Comment lire un texte face caméra ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Scripts GML-
Sauter vers: