Fichiers : enregistrez en xml !

Soyez le premier à donner votre avis sur cette source.

Snippet vu 20 398 fois - Téléchargée 38 fois

Contenu du snippet

Beaucoup de programmes utilisent un enregistrement de fichier, de configuration, de n'importe quoi ... Le problème se pose souvent quant au format à utiliser .
Je ne sais pas vous mais moi la programmation des fichiers en vb, ca m'emmerde .. Dès qu'on veu ajouter des headers, séparer des information, enfin bref, c'est chiant .

Je me penche hier sur le problème de l'enregistrement des fichiers d'un logiciel en cours de "vernissage" : le logiciel enregistre dans un fichier une configuration de boutons pour des périphériques ... mais le problème pour moi est : que se passe t il si on tente d'ouvrir un fichier de config créé dont le périphérique n'existe plus : le fichier fait référence à un joystick qui n'existe plus par exemple (débranché le joystick) ?
Il serait bon d'ajouter en début de fichier la liste des périphériques utilisés . Mouais, le pb est que la longueur de cette liste est variable, enfin la je m'empetre dans le format ... Et la, une lumière jailli du plafond, et je vois en lettres de feu : XML .... Raaah j'avais failli l'oublier celui la !

QU'EST CE QUE LE XML ?
Le xml est un dérivé du html, une sorte de html amélioré quoi . Je suppose que vous avez au moins un minimum de connaissance quant au HTML, que vous savez au moins que c'est formé de balises : <BALISE></BALISE> ... Le but du xml est d'ajouter l'enregistrement de données quelconques dans le fichier ...

UN EXEMPLE VAUT MIEUX QUE MON STYLE LITTERAIRE DEFAILLANT ...
Je remprend l'exemple du logiciel dont j'ai parlé : je veux stocker dans mon fichier, de type dxpfile plusieurs choses :
1- Un header qui contiendra des informations sur le fichier (nom du créateur, numéro de série du logiciel, age du capitaine ...), ainsi que la liste des périphériques utilisés, chacun avec leur nom et leur GUID (numéro caractéristique du périph.)
2- Une liste de liens : action-touches, sous forme de strings.

Le fichier final aura cette forme :

<DXPFILE filename="C:\\Documents and Settings\\Vatoo\\Mes documents\\d.dxp>
<HEADER>
<DEVICES>
<DEVICE guid="GUID_SysMouse">Souris</DEVICE>
<DEVICE guid="GUID_SysKeyboard">Clavier</DEVICE>
</DEVICES>
</HEADER>
Configuration: 
<LINK>Previous@STATE#GUID_SysMouse.14#1</LINK>
<LINK>Next@STATE#GUID_SysKeyboard.2#1</LINK>
<LINK>Next@STATE#GUID_SysKeyboard.3#1</LINK>
<LINK>Play@STATE#GUID_SysKeyboard.4#1</LINK>

</DXPFILE>

C'est pas trop dur a comprendre, c'est comme un arbre qu'on déroule quoi, avec des branches, des sous branches, des feuilles . Chaque branche est appelée ELEMENT avec des sous branches : Du html mais avec des balises personnelles, voila le principe du xml .

COMMENT FAIRE AVEC VB ?
1- Charger la référence : projet>référence>microsoft xml 2.0 (c'est celui que j'ai utilisé, les autres doivent marcher avec quelques modifications peut etre ...)
2- Et on est parti pour un peu de code ....

Source / Exemple :


'On définit xml : c'est lui qui contiendra le document final xml
Dim xml As New MSXML.DOMDocument

'xdoc est l'élément principal : ici dxpfile
Dim xdoc As IXMLDOMElement

'd'autres éléments principaux : header,devices,config, et temp
'pour des éléments temporaires
Dim xheader, xperiphs, xconfig, xtemp As IXMLDOMElement

'On crée l'élément principal
Set xdoc = xml.createElement("DXPFILE")
'On modifie ses attributs : contenus dans la balise, regardez
'le fichier xml résultant pour voir ce que cela modifie 
xdoc.setAttribute "filename", "C:\\Documents and Settings\\Vatoo\\Mes documents\\d.dxp"
'Et on le définit comme enfant du document principal
xml.appendChild xdoc

'On crée le header
Set xheader = xml.createElement("HEADER")
'Et le config
Set xconfig = xml.createElement("CONFIG")

'On définit le header comme fils du document principal
'donc "sous branche" de DXPFILE
xdoc.appendChild xheader

'On crée et on ajoute la sous branche de HEADER
'appellée DEVICES
Set xperiphs = xml.createElement("DEVICES")
xheader.appendChild xperiphs

'On informe vb que config est aussi une sous branche de DXPFILE
xdoc.appendChild xconfig

'On ajoute tous les périphériques
   Set xtemp = xml.createElement("DEVICE")
   xtemp.setAttribute "guid", "GUID_SysKeyboard"
   xtemp.Text = "Clavier" 'Ca c'est pour le contenu meme des balises
   xperiphs.appendChild xtemp 'Et hop, xtemp est un fils de DEVICES

   Set xtemp = xml.createElement("DEVICE")
   xtemp.setAttribute "guid", "GUID_SysMouse"
   xtemp.Text = "Souris" 'idem
   xperiphs.appendChild xtemp 'Et hop, xtemp est un fils de DEVICES

  
 'Ajout des LINKS
  Set xtemp = xml.createElement("LINK")
   xtemp.Text = "Previous@STATE#GUID_SysMouse.14#1"
   xconfig.appendChild xtemp 'Sous branche de CONFIG

  Set xtemp = xml.createElement("LINK")
   xtemp.Text = "Next@STATE#GUID_SysKeyboard.2#1"
   xconfig.appendChild xtemp 'Sous branche de CONFIG

  Set xtemp = xml.createElement("LINK")
   xtemp.Text = "Next@STATE#GUID_SysKeyboard.3#1"
   xconfig.appendChild xtemp 'Sous branche de CONFIG
   
  Set xtemp = xml.createElement("LINK")
   xtemp.Text = "Play@STATE#GUID_SysKeyboard.4#1"
   xconfig.appendChild xtemp 'Sous branche de CONFIG
   

'Puis on définit l'élément principal de xml comme étant xdoc
Set xml.documentElement = xdoc
'Et on enregistre le tout dans un fichier
xml.Save "C:\\Documents and settings\\Vatoo\\Mes documents\\d.dxp"

Conclusion :


Le fichier étant maintenant écrit, il nous reste à le lire, ce qui se fait de la même manière : on définit xml comme MSXML.DOMDocument avec :

Dim xml As New MSXML.DOMDocument

Puis on utilise:

xml.load "C:\\Documents and Settings\\Vatoo\\Mes documents\\d.dxp"

Et on accède aux enfants par les méthodes getelementsbyid pour accéder à un noeud précis (par exemple CONFIG), et aux enfants par les méthodes child, getchild, et quelques autres méthodes, toutes assez bien expliquées par l'explorateur d'objet (rappel : F2), dans la librairie MSXML et le composant DOMDocument, on peut ainsi retrouver l'ensemble de "l'arbre".

Par exemple ici pour retrouver l'ensemble des périphériques :

dim xtemp as msxml.IXMLDOMElement
for each xtemp in xml.getelementsbyid("DEVICE")
msgbox "Le fichier contenait ce périphérique :" & vbcrlf & xtemp.text
next

Pour info, ce DOMDocument permet aussi de créer et charger un fichier HTML pour l'analyser ... Je dis ca en pensant aux codes que j'ai vu qui s'obstinent a vouloir analyser un fichier HTML en utilisant des STRINGS : si votre fichier HTML est bien formulé, DOMDocument fait ca de facon bien plus rapide ....

Vous pouvez aussi regarder ma source "Accéder aux objets d'un webbrowser", dont je ne me rappelle plus le numéro ... Normalement, vous savez maintenant comment manier en un minimum de lignes de codes tous les fichiers html et xml, les modifier, enregistrer, analyser ...

Amusez vous bien
Je reste a votre disposition pour plus d'informations : coutud@hotmail.com

Attention : Je suis en dehors des vacances scolaires en internat, donc sans accès à vb, je ne pourrai donc pas vous envoyer de zip ou vous répondre précisément : je n'ai pas l'intitulé exact de toutes les méthodes en tête ...

A voir également

Ajouter un commentaire

Commentaires

ElDamino25
Messages postés
3
Date d'inscription
mercredi 1 juillet 2009
Statut
Membre
Dernière intervention
9 juillet 2009
-
Merci beaucoup :)
ElDamino25
Messages postés
3
Date d'inscription
mercredi 1 juillet 2009
Statut
Membre
Dernière intervention
9 juillet 2009
-
Malgré que je soit un peu en retard par rapport au message de vatoo, quelqu'un pourrait-il m'expliquer pourquoi lorsque je colle le code en notepad et que je l'active, il me dit qu'il y a un problème avec la 2eme ligne??
Et par la même occasion, quelqu'un serait- il assez aimable que pour m'expliquer le pourquoi du comment dans ce style de programmation?
Duke49
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
2 -
Depuis 2002 ta dû bien progresser en XML.
Ton partage est extra; si ta une source MSXML2 du Document v6, pense à nous.

C'est un plaisir de lire ton code, y a pas assez d'exemple comme celui là.
Nic0s
Messages postés
10
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
18 décembre 2008
-
pour le saut de ligne entre chaque balise , le langage xml n'en a pas besoin. mais pour que vos lecteurs xml le fasse intelligemment il manque la déclaration du xml ( la ligne : <?xml version="1.0" encoding="UTF-8"?> au début du fichier...)

voici le code pour l'ajouter:
'au niveau des declaration
Dim xmlPI As MSXML2.IXMLDOMProcessingInstruction

'avant le xml.save par exemple ...
'création et insertion de l'entête XML
Set xmlPI = xml.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
xml.insertBefore xmlPI, xdoc

xml.Save "C:\\Documents and settings\\Vatoo\\Mes documents\\d.dxp"
devsurf
Messages postés
148
Date d'inscription
dimanche 13 octobre 2002
Statut
Membre
Dernière intervention
13 novembre 2008
-
Salut,
Je me suis mis aujourd'hui à apprendre le XML et tombé directement sur cet article.
Merci beaucoup car très détaillé et claire pour un débutant comme moi.
Ca me permet d'apprendre et avancer correctement ce langages.

L'article a été écrit en 2002 et apparemment toujours utile en 2007.


1000 Mercis à Vatoo (que 5 ans après doit etre un supert expert en XML ) et à tous les autres intervenants.

10/10

A+

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.