Les fichiers XML pour les nuls avec Visual Basic .NET
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.
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 ?
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 !