Fichiers : enregistrez en xml !

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

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.