Les fichiers XML pour les nuls avec Visual Basic .NET

Tags: XML

Il est de plus en plus fréquent que l'on manipule des fichiers Xml dans nos applications .NET. Bien que cette manipulation soit facilité par nombre de classe du framework de base (2.0), l'ajout de Linq et le support de l'Intellisense dans Visual Studio fait que cela devient véritablement une partie de plaisir avec VB .NET.

Prenons l'exemple au long veut définir nous même notre propre structure de fichier Xml.

Ajout d'une Intellisense "poussée"

Nous allons dans un premier temps écrire notre fichier Xml tel que nous voudrions qu'il soit :

<?xml version="1.0" encoding="utf-8" ?>
<Application xmlns="myDatas">
    <Region key="toolbar">
        <View key="toolbarScreen" fullName="MyNamespace.View.ToolbarView" />
    </Region>
    <Region key="main">
        <View key="mainScreen" loadAtStart="true" fullName="MyNamespace.View.MainView" />
        <View key="ListePersonnesScreen" loadAtStart="true" fullName="MyNamespace.View.ListePersonnesView" />
    </Region>
</Application>

 

On aura bien pris soin d'imaginer tous les cas de figure (par exemple, l'attribut loadAtStart n'apparait pas partout dans les éléments View).

Je veux maintenant une Intellisense plus poussée, c'est-à-dire que quand je vais éditer mon fichier Xml, l'Intellisense me propose les tags et attributs de la structure de mon fichier Xml.

Dans Visual Studio, je vais donc dans le menu Xml, puis dans "Créer un fichier xsd". Et je bénéficie alors de l'Intellisense. Vous pouvez alors ajouter ce xsd à votre projet.
Si c'est une structure que j'utilise un peut partout dans mon/mes projets, il suffit alors de sauvegarder ce fichier xsd dans : C:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas.

xml0

Créer un fichier Xml

Le langage Visual Basic avec le nouveau compilateur 3.5 permet d'écrire très simplement des fichiers Xml et ce le plus naturellement du monde. Inutile de créer des objets, des instances, etc, vous tapez le code Xml tel qu'il devrait apparaitre dans le fichier final. Un élément Xml est un XElement. Exemple :

Dim mainRegion As XElement = _
       <Region name="main">
            <View key="mainScreen" loadAtStart="true" fullName="MyNamespace.View.MainView"/>
            <View key="ListePersonnesScreen" loadAtStart="true" fullName="MyNamespace.View.ListePersonnesView"/>
       </Region>
 

Cette syntaxe est vraiment sympatique en comparaison de ce qu'il est nécessaire d'écrire en C# (bien que ce ne soit pas non plus la mer à boire).

Vous pouvez même vous amuser à merger plusieurs XElement entre eux :

Dim application As XElement = _
       <Application>
            <%= mainRegion %>
       </Application>

Et pour le sauvegarder, utilisez tout simplement la méthode Save du XElement.

De plus, si vous voulez définir un namespace Xml, vous pouvez le faire soit par le code en utilisant un XNamespace, soit en le déclarant comme Imports dans votre fichier :

Imports System.Xml.Linq
Imports <xmlns="myDatas">

Ainsi, tout va XElement dans votre fichier seront dans le Namespace myDatas.

Lire un fichier Xml

La lecture est aussi toute simple, et elle est également simplifiée par l'Intellisense. Si par exemple, la lecture de ce fichier (voir plus haut) peut s'effectuer de la façon suivante :

Dim doc As XDocument = XDocument.Load("myDatas.xml")
Dim uiConfig As New UIConfigurationManager    
For Each eltRegion In doc.<Application>.Elements       
    Dim region As New Region(eltRegion.@key)
    uiConfig.Regions.Add(region)
    For Each eltView In eltRegion.Elements
        Dim view As New View( _
                 eltView.@key, _
                 IIf(eltView.Attribute("fullName") Is Nothing, Nothing, eltView.@fullName), _
                 IIf(eltView.Attribute("loadAtStart") Is Nothing, False, eltView.@loadAtStart))
        region.Views.Add(view)
    Next  
Next

 

Vous verrez alors que quand vous tapez : eltView.@..., l'intellisense vous propse les attributs déclarés dans votre fichier xsd. Cool non ?

xml1

Si j'ai écris cet article aujourd'hui, c'est que je suis en train de préparer un mini-framework qui permettra de charger dynamiquement l'UI d'une application WPF/Silverlight en s'appuyant sur un fichier de configuration. Ce sera l'objet d'un autre article. STAY TUNE !

blog comments powered by Disqus