I. Quelques notions

a. Le XML, c'est quoi ?

C'est un langage qui permet de décrire une classe d'objets "documents xml". Au sein de ces documents, le XML impose une structure aux données de façon lisible dans un simple format texte. Le XML utilise le principe bien connu de balises mais celles-ci sont propres au créateur du document et non pas standardisées comme pour du HTML. Il est donc évidemment impératif de bien choisir ses balises pour la bonne compréhension de la structure du document. Un exemple est bien plus parlant :

 
Sélectionnez

 <?xml version="1.0" encoding="ISO-8859-1" ?> 
<developpez>
   <membre fonction="Responsable Visual Basic">
      <nom>Cécile Muno</nom>
      <pseudo>khany</pseudo>
      <activite>
         <date-inscription>20/10/2002</date-inscription>
         <nbmsg>1721</nbmsg>
         <nbtutoriel>4</nbtutoriel>
     </activite>
   </membre> 
   <membre>
      <nom/>
      <pseudo>jpdar</pseudo>
      <activite>
         <date-inscription>29/12/2005</date-inscription>
         <nbmsg>14</nbmsg>
         <nbtutoriel>0</nbtutoriel>
      </activite>
   </membre> 
   <membre fonction="admin">
      <nom>Cédric Chatelain</nom>
      <pseudo>cchatelain</pseudo>
      <activite>
         <date-inscription>26/05/2002</date-inscription>
         <nbmsg>2840</nbmsg>
         <nbtutoriel>10</nbtutoriel>
      </activite>
   </membre> 
</developpez>

b. Un peu de vocabulaire

Pour ceux qui n'auraient pas ou peu eu l'occasion de cotoyer le format XML, voici un survol très rapide du vocabulaire lié à cette norme. Pour plus de précisions, rendez-vous sur le forum XML.

Un document XML est reconnaissable par :

  • Les éléments de balisage : un " élément " est composé d'une balise ouvrante, de la balise fermante associée et de tout ce qui se trouve entre ces balises.
  • Une balise ouvrante peut aussi contenir un ou plusieurs " attributs "
  • Les noeuds : essence même du document XML, ils modélisent tous les éléments et le document lui-même est modélisé par le noeud " / " appelé "racine du document XML"

En reprenant notre exemple précédent, nous pouvons donc dire :

 
Sélectionnez

<!---Balises ouvrantes/fermantes--->
<developpez>  </developpez>

<!---Attributs : fonction dans la balise membre--->
<membre fonction="Responsable Visual Basic">
</membre>

<!---Eléments--->
   <membre>
      <nom/>
      <pseudo>...</pseudo>
      <nbmsg>...</nbmsg>
   </membre> 

Et pour vous donner une idée de l'agencement des noeuds, voici une partie de la représentation de l'arbre XML associé à cet exemple :

Image non disponible

Il ne sert à rien d'aller plus loin dans le détail des normes XML, vous trouverez tout ce qui vous intéresse sur le forum XML ainsi qu'en lisant les tutoriels XML de developpez.com.

c. Quelques "bonnes" raisons pour utiliser le XML

Il en existe beaucoup et son utilisation dépend exclusivement du type d'application que vous devez écrire mais, sachez que cette norme peut être invariablement utilisée pour les raisons suivantes :

  • la facilité de lecture d'un document XML par qui que ce soit
  • le nombre sans cesse croissant des applications qui utilisent et optimisent cette norme
  • la simplicité d'utilisation sur Intranet/Extranet
  • la rapidité de création d'une structure XML
  • l'aisance d'exploitation via le code de ce type de document
  • l'inutilité d'une formation pour encoder des données sous un tel format
  • importation et exportation de données à partir et vers de multiples applications
  • ...

II. Exploitation de document XML

a. Les références

Comme pour tout composant non référencé à la base dans Visual Basic 6, il faut évidemment cocher les bonnes références avant de pouvoir utiliser la norme XML. Au fil du temps, cette norme a poursuivi son évolution dans les systèmes d'exploitation, il existe donc plusieurs références. Dans ce petit projet, j'ai choisi Microsoft XML 3.0 car elle est installée automatiquement avec Internet Explorer 6 et vous n'aurez ainsi aucun problème pour exécuter ce programme.

Image non disponible
Microsoft XML v2.6

b. Le principe d'évolution dans un document XML

Comme vous avez pu le constater sur l'image représentant l'arbre de notre document XML, le principe d'élaboration est basé sur des niveaux de balises. Bien visualiser la logique de cette cascade de noeuds est essentiel pour développer le code d'exploitation. En effet, le principe sera toujours le même quelque soit la manipulation à effectuer sur le document : il faudra progresser logiquement dans les noeuds, niveau par niveau. Vous ne pouvez en effet pas atteindre directement un noeud de niveau 3 sans avoir référencé les noeuds de niveau supérieur au préalable.

Dans l'exemple de document que nous allons exploiter, voici un schéma pour vous expliquer plus simplement les niveaux de noeuds :

Image non disponible
Niveaux des noeuds

Les puristes de la norme XML n'aimeront peut-être pas ce genre de "nivellage" mais il est bien plus facile de s'y retrouver dans la programmation en ayant bien en vue le nombre de noeuds à définir pour progresser dans le document. Aidé par l'arbre XML, il sera dès lors simple de placer vos "définitions".
Par exemple :

 
Sélectionnez

Dim oDvpDOMDocument As MSXML2.IXMLDOMDocument
Dim oNoeudMembre As MSXML2.IXMLDOMElement                ' élément membre
Dim oNoeudEnfantMembre As MSXML2.IXMLDOMElement          ' élément fils de oNoeudMembre
Dim oNoeudEnfantMembreActivite As MSXML2.IXMLDOMElement  ' élément fils de oNoeudEnfantMembre
    

Ceci est évidemment un exemple car, parfois, il n'est pas utile de déclarer tous les noeuds enfants, on peut passer d'un noeud de même niveau à un autre noeud de même niveau sans déclarer les noeuds enfants.

c. Les principales déclarations liées au XML

Cette liste est réduite à sa plus simple expression aussi bien pour les éléments existants que pour les méthodes et propriétés associées.

1. MSXML2.DOMDocument

Permet de déclarer une variable comme faisant référence au document XML utilisé.
Cette variable, reconnue comme étant un document XML, possède des méthodes qui permettent d'exploiter le document.
Par exemple, si je désire ajouter un élément à mon document, je pourrai le programmer comme suit :

 
Sélectionnez

Set oNoeudMembre = oDvpDOMDocument.createElement("membre")

en spécifiant grâce au Set à quel noeud j'ajoute un élément.

2. MSXML2.IXMLDOMElement

Concerne bien évidemment les éléments du document XML et donc les "niveaux" que je peux parcourir. Voir de nouveau l'exemple de "nivellage".
Ces éléments possèdent eux aussi des méthodes permettant de réaliser diverses actions. Les plus simples à comprendre et à appréhender me semblent être :

  • getAttribute : permet de lire l'attribut de l'élément
  • getElementsByTagName : permet de rechercher la valeur d'un élément par le nom de la balise
  • hasChildNodes : permet de savoir si des noeuds enfants existent et si oui, quels sont-ils.

3. MSXML2.IXMLDOMNode

Comme le nom l'indique, nous travaillons ici au niveau des noeuds de notre document XML qui possèdent eux aussi des méthodes comme :

  • hasChildNodes : permet de savoir si ce noeud précis possède des noeuds enfants
  • removeChild : permet de supprimer un noeud enfant
  • replaceChild : permet de remplacer un noeud enfant par une autre valeur
  • selectSingleNode : permet de sélectionner un noeud précis (grâce au nom de la balise)

4. MSXML2.IXMLDOMNodeList

La liste des noeuds, comme vous l'avez sûrement deviné, permet de faire des recherches assez rapides dans les noeuds enfants.
Un petit exemple pour illustrer ce fait :

 
Sélectionnez

Dim oListeNoeuds As MSXML2.IXMLDOMNodeList
Dim oNoeud As MSXML2.IXMLDOMNode

For Each oNoeud In oListeNoeuds
 ......
Next

Bien évidemment, il existe aussi des propriétés comme dans l'exemple ci-dessus où la valeur d'un noeud est définie par la propriété "Text".

d. Conclusion

Ce petit tour d'horizon est bien trop rapide pour vous faire plonger dans toutes les possibilités des méthodes et propriétés de l'objet XML.
Pour vous familiariser avec leur utilisation, je vous propose quelques petits codes tout simples, juste pour bien comprendre la logique d'exploitation d'un document XML.

Ces codes sont accessibles en téléchargeant l'application Visual Basic 6.0Programme VB associée à ce tutoriel.

III. Quelques codes simples

a. Ouvrir un document XML

Il faut juste attirer l'attention sur le fait qu'il existe deux manières de charger un document XML : synchrone ou asynchrone.
Par défaut, le fichier est chargé de manière asynchrone. Il faut spécifier :

 
Sélectionnez

oDvpDOMDocument.async = False

pour charger tout le document en mémoire. Ce sera le cas dans les exemples associés au tutoriel vu que le fichier est en local et très petit.

Le document sera chargé pour chaque action choisie dans l'exemple afin de ne pas vous obliger un ordre d'exécution précis des exemples fournis.
Vous pouvez donc choisir n'importe quelle action de l'application en exemple pour voir le code d'ouverture et de chargement d'un document XML.

b. Rechercher une donnée

Le principe de la recherche consiste à parcourir les noeuds à partir de la racine, soit en cherchant une balise précise, soit en cherchant un attribut.

Il faut donc bien veiller à définir les "elements", "nodes", "nodelist" dont on peut avoir besoin. Evidemment, dans l'exemple c'est assez simple puisque l'on connait la structure du document et le nom des balises.
La programmation est moins aisée s'il faut partir d'un document XML dont on ne connait pas la structure. Ce n'est pas le but dans cette introduction.
L'exemple joint recherche un pseudo précis.

c. Ajouter une donnée

Dans notre exemple, cela consiste à ajouter un nouveau membre dans le XML des membres de developpez.com.
L'ajout concerne se fait toujours en signalant à la racine du document XML que l'on va créer un nouvel élément.
Dès que vous avez compris cela, trouver le code est relativement simple sachant que la procédure est la même pour chaque niveau de création d'une balise.

Il faut bien comprendre que pour créer un nouvel élément, il faut 2 instructions. La méthode "createElement" ne crée pas la balise, elle n'est vraiment implémentée qu'au moment de l'exécution de la méthode "appendChild".

d. Mise à jour d'une donnée

La mise à jour d'une donnée reste basée sur le même principe que la recherche à la seule différence que l'on modifie la donnée contenue dans la balise ciblée. On procède alors en modifiant la propriété Text, ce qui est une chose assez aisée à réaliser.

e. Créer un document XML

Très similaire à l'ajout de données sauf qu'il faut créer le document en y plaçant l'entête propre à ce type de document ainsi que l'extension ad hoc.

f. Gestion des erreurs

Un simple exemple de la gestion des erreurs via "parseError".

IV. Tutoriel interactif

Je vous propose, sur base de l'exemple associé à ce tutoriel, de le rendre interactif.
L'exploitation de documents XML étant un domaine très vaste, j'ai pensé que le mieux pour aider les utilisateurs serait de pouvoir faire évoluer ce tutoriel avec vos propres réalisations.
Pour ce faire, il faut évidemment instaurer quelques règles d'organisation et préciser comment vous allez pouvoir étoffer ces codes plutôt simplistes.

Il est nécessaire de poser les bases de l'organisation afin que ce système soit performant et intéressant à tous points de vue.
Si vous désirez que votre proposition soit publiée, je vous enjoins donc à suivre ces quelques impératifs :

a. Comment organiser vos propositions ?

En quelques points, voici comment procéder :

  • Se baser sur l'exemple joint à ce tutoriel en y ajoutant une feuille portant votre nom/pseudo.
  • Se baser sur le document XML utilisé. Vous pouvez le modifier suivant vos besoins mais, dans ce cas, faites-en une copie et appellez-le "dvp-xxxx.xml" ou "xxx" est votre nom/pseudo
  • Lancer l'exécution de votre feuille à partir de la feuille Sélection en y ayant placé un nouveau bouton avec un titre explicite
  • Commentez clairement votre code sans user d'abréviations.

b. Comment rédiger vos explications ?

Il est bien évident que les codes seuls ne peuvent pas renseigner sur ce que vous avez voulu réaliser. Une explication substantielle est donc nécessaire en accompagnement.
Veuillez respecter ces quelques consignes dans vos explications :

  • Précisez sur quel système d'exploitation vous travaillez ainsi que tout autre renseignement qui pourrait affecter l'exécution du code.
  • Décrivez précisemment quelles références sont nécessaires et prenez la peine éventuellement de faire une capture d'écran pour montrer la(es) référence(s) cochées.
  • En début de vos explications, faites un résumé succint du but de votre code.
  • Soyez clair et précis dans le texte explicatif, évitez les abréviations et le style sms.
  • Tapez le texte dans un traitement de texte d'utilisation courante voire même dans le bloc-note, cela est largement suffisant. La mise en page n'est pas nécessaire (sauf si vous désirez chapitrer le texte), elle sera de toute façon adaptée au format actuel du tutoriel.

c. Comment me faire parvenir votre contribution ?

Afin d'intégrer votre proposition à ce tutoriel, il est nécessaire que je recoive, sous forme de fichiers "ZIP" :

  • Le programme d'exemple initial complété par votre(vos) feuille(s) et zippé dans un fichier nommé "xml.zip".
  • Votre fichier d'explications zippé dans un fichier nommé "expl-xxx.zip" où "xxx" est votre nom/pseudo.
  • Eventuellement un fichier zippé contenant vos images sous le nom "images-xxx.zip" où xxx est votre nom/pseudo.
  • Prévenez-moi par MP pour me signaler votre participation. Envoyez-moi les zip sur mon mail rédaction ou donnez-moi un lien internet où les télécharger. (Vous pouvez regrouper les différents *.zip dans un seul zip portant votre nom/pseudo).
  • Toute communication concernant votre proposition avant ou après réalisation se fera exclusivement par MP.

d. Intégration au tutoriel

Je me charge de l'intégration de vos commentaires et du programme modifié dans ce tutoriel en référencant, bien entendu, que vous en êtes l'auteur exclusif. Les sources publiées sont toujours libres de droit mais le texte associé est protégé au même titre que tous les tutoriels publiés sur développez.

Je précise aussi que l'intégration de votre code est soumis à l'approbation de l'équipe Visual Basic quant à sa nécessité, la manière de coder, la pertinence des commentaires et explications ainsi que la facilité d'exécution. Il est évident que nous vous tiendrons au courant des remarques éventuelles afin de faire évoluer positivement votre proposition et aboutir à son intégration.

Quelques précisions importantes

  • Votre code doit répondre à une utilisation générale assez courante et être complet quant à la solution proposée.
  • Ne seront acceptés que les codes proprement indentés et commentés.
  • Ne seront acceptés que les codes accompagnés d'un fichier d'explications claires et complètes.
  • Le code doit être testé et fonctionnel sous une installation standard de Visual Basic 6.0.
  • L'acceptation ou le refus d'un code est du ressort de l'ensemble de l'équipe Visual Basic. Il ne sera pris en compte aucune demande de renseignements, réclamation, question ou quelconque correspondance qui ne serait pas rédigée suivant les règles de developpez.com (sms, orthographe, politesse, ...).

A vos codes et bon travail !

V. Téléchargements

VI. Liens utiles

VI. Remerciements

A toute l'équipe Visual Basic et plus particulièrement à Argyronet pour ses conseils avisés et la relecture du cours.

Je tiens déjà à remercier aussi tous les futurs participants pour l'évolution de ce tutoriel.