begin process at 2012 02 10 01:05:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > FICHIERS : ENREGISTREZ EN XML !

FICHIERS : ENREGISTREZ EN XML !


 Information sur la source

Note :
9,05 / 10 - par 22 personnes
9,05 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Niveau :Débutant Date de création :28/12/2002 Date de mise à jour :05/01/2004 21:20:11 Vu :18 435

Auteur : vatoo

Ecrire un message privé
Site perso
Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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>
<CONFIG>
  <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>
</CONFIG>
</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

  • '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"
'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 ...
  


 Sources du même auteur

PLUGINS AU FORMAT DLL ...
Source avec Zip Source avec une capture IPTIX
ACCÉDER AUX OBJETS DE LA PAGE AFFICHÉE PAR WEBBROWSER

 Sources de la même categorie

Source avec Zip DLL PERSONNALISÉ AVEC ÉVÈNEMENTS ET PROPRIÉTÉS EN VB6. par Number7
Source avec Zip Source .NET (Dotnet) EXEMPLE DU TUTORAIL "CLASSES MÉTIER" par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES LISTES : RANGEMENT (LIST.SORT) ET FILTRAGE (LIST... par kbalist
Source avec Zip EXEMPLE SUR LES MENUS POUR AIDER LES DÉBUTANTS COMME MOI ;-) par viragoloco
LES OPÉRATIONS DE LA LISTE CHAINÉE par smaili

Commentaires et avis

Commentaire de matrey le 28/12/2002 20:20:51

Très bon tutorial, très complet et bien détaillé. Bravo !!!

Commentaire de Hobby le 17/06/2003 01:44:49

Impecable comme source, cela fonctionne a merveille.

Juste pour info dans la version 5 de la DLL il y des petits changement:

c'est plus: Dim xml As New MSXML.DOMDocument
mais: Dim xml As New MSXML2.DOMDocument

pour la lecture: Dim xml As New MSXML.DOMDocument
Devient: Dim xml As New MSXML2.DOMDocument
idem pour: dim xtemp as msxml.IXMLDOMElement
devient: dim xtemp as msxml2.IXMLDOMElement

Et enfin plus important:
xml.getelementsbyid("DEVICE")
devient: xml.getElementsByTagName("DEVICE")

Je me pose une question: Peut t'on modifiez un seul paramete ou il faut ré-écrire toutes les données?

a+
Olivier

Commentaire de samirog le 31/12/2003 16:05:50

Super tutorial ; dommage qu'il y ait pas de zip. mais vu que c'est très bin expliqué, je met 10/10

Commentaire de Esquisse le 09/04/2004 18:27:25

Pour Hobby,

en fait pour modifier un enregistrement fait comme ca :


xml.getElementsByTagName(Section).Item(0).firstChild.Text = Valeur

oubli pas aussi : xml.save App.Path & "\config.xml"

Note : Si tu as plusieurs données pour ton noeud c'est de la simple gestion d'items (donc je pense que tu sais faire).

Commentaire de zefree le 14/04/2004 15:30:09

merci bcp, très utile

Commentaire de zefree le 14/04/2004 15:32:25

ha oui j'oubliais, pour ceux désirant une doc sur xml et le .NET

http://www.labo-dotnet.com/labo-dotnet/Lessons/xmlnet.pdf


:) a+

Commentaire de Sploof le 08/06/2004 10:13:15

Excellent !!

Merci Vatoo et Esquisse  également.

Ta source est vraiment trés bien Vatoo, je ne connaissais pas du tout xml, en ai besion pour un projet et maintenant c'est nickel !!

Je mets également 10/10, les commentaires sont trés bien !!

Salut à tous ;) !!

Commentaire de Womby le 22/08/2004 12:45:00

De quoi demarrer sans arrachage de cheveux dans l'XML... Merci pour ce tutoriel!

Bonne continuation et Au prochain tutoriel! ;)

Commentaire de hakim0 le 23/08/2004 21:16:11

je trouve un fichier s'imple d'enregistrement est parfait... le xml a des extention a internet ..exemple avec flash... mais bonn tuturial ... Merci

Commentaire de kalos le 17/06/2005 16:48:15

Super cet article.
Par contre lorsque j'édite le fichier XML créé par mon appli vb (vb 6), toutes les balises sont sur la même ligne ...
<CONF><DATA1><DATA2>valeur1</DATA2></DATA1></CONF>
Y'a pas un moyen pour avoir un saut de ligne entre chaque balise ??
<CONF>
<DATA1>
<DATA2>valeur1</DATA2>
</DATA1>
</CONF>

Merci d'avance pour votre aide

Commentaire de vatoo le 20/06/2005 00:40:04

J'ai remarqué qu'il y avait ce petit problème. Si tu fais effectivement du savedata, ca te donne ce xml sous cette forme la.
La seule solution que je connaisse pour le remettre en forme serait une analyse du .innerxml, avec un truc genre analyse récursive en arbre pour extraire les balises et les inscrire dans un fichier à la main ... Bof bof. T'as peut etre un truc déjà fait qui traine quelque part sur internet. ou sur vbfrance.

Commentaire de VinceVG le 20/10/2005 18:16:35

Merci. Trés bonne explication. Mais il manque l'aide pour installer msxml sur d'autre postes.

Commentaire de christuf le 23/01/2006 19:11:14

même question de Kalos,
comment fait-on pour sauter des lignes après chaque balise (pour ne pas avoir tout le code sur 1 ligne) ???

Commentaire de VinceVG le 24/01/2006 10:58:16

J'ai fais plein de recherche et la réponse que j'ai eu. C'est que c'est impossible. Il semblerait qu'il faille profiler le fichier aprés sa création. Pas trés pratique un !

Commentaire de vatoo le 27/01/2006 00:39:22

Dernière solution : tu fais un replace("><",">"&vbcrlf&"<") sur ton innerXml (je sais plus la commande replace en vb6, c'est du innerXml.replace("><",">"&vbcrlf&"<") dans l'idée en .net

Commentaire de vbmarh le 10/01/2007 09:32:00

Salut jouste pour eviter une eventuelle erreur la declaration du fichier xml :
Dim xml As New MSXML2.DOMDocument  au lieu de
Dim xml As New MSXML.DOMDocument  >>> Pour la reference
MICROSOFT XML V2.6
Sinon Pour les familiers du <xml y a t il un moyen generer des forme ou charger des control dynamiquement avec Xml

Commentaire de devsurf le 22/02/2007 14:19:20

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+

Commentaire de Nic0s le 26/10/2007 15:43:01

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"

Commentaire de Duke49 le 22/03/2009 15:18:52 9/10

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

Commentaire de ElDamino25 le 01/07/2009 21:29:40

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?

Commentaire de ElDamino25 le 01/07/2009 21:30:00

Merci beaucoup :)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,451 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales