Les fichiers XML et VB.Net

selkis

Création et lecture d'un fichier Xml à schéma connu en utilisant la classe XmlDocument. ♪

Télécharger le code source commenté exemple vb.net Lecteur de flux rss [ftp://www.ftp-developpez.com/selkis/fichiers/PrjXml.zip]

- Titre : Les fichiers XML et VB.Net

- Auteur : selkis

- Parution : 8 mars 2005

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2005 selkis. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Création d'un fichier XML

- I-A. Le principe en six points

- I-B. Code source

- II. Lecture d'un fichier XML

- II-A. Extraction des données

- II-B. Le principe en cinq points

- II-C. Code source

I - Création d'un fichier XML

Un fichier Xml doit être écrit selon un schéma bien défini, nous allons donc définir la structure de notre fichier suivant ce schéma : pour créer un fichier xml standard à la syndication de contenu au format rss, voir les références en fin d'article

<lstSite>
<SITE>
<URL>http://www.peuw.net/index.xml</URL>
<NOM>peuw.net</NOM>
</SITE>
<SITE>
<URL>http://www.poxx.net/index.xml</URL>
<NOM>poxx - Science Fair</NOM>
</SITE>
</lstSite>

Imports System.Xml

Nous allons donc déclarer l'objet XmlDoc représentant notre document avec la classe XmlDocument.

'création d'une nouvelle instance du membre xmldocument
Dim XmlDoc As XmlDocument = New XmlDocument()

Puis nous allons tout créer et baliser un document vierge de par la propriété LoadXml (crée un document suivant le code passé en paramètre) du XmlDocument.

'création du document
XmlDoc.LoadXml("[lstSite][/lstSite]")

Ensuite pour chacun des flux, nous allons créer une balise [SITE][/SITE] qui contiendra une balise [URL][/URL] et une balise [NOM][/NOM].

Chaque flux est représenté par un élément (classe XmlElement), nous devons donc les déclarer.

À savoir :

Dim elemSite As XmlElement 'ElemSite pour le nœud [SITE][/SITE]
Dim elemUrl As XmlElement 'ElemSite pour le nœud [URL][/URL]
Dim elemNom As XmlElement 'ElemSite pour le nœud [NOM][/NOM]

Pour créer nos balises, regardons de plus près les propriétés de la classe XmlElement qui nous seront utiles, à savoir :

.CreateElement : pour créer un nouveau nœud (une nouvelle balise) ;

.InnerText : pour définir la valeur de la balise (nœud) ;

.AppendChild : pour ajouter le nœud à notre document (à la fin de la liste des enfants de ce nœud).

I-A - Le principe en six points

1) Créons d'abord notre balise [SITE][/SITE] qui est en fait le nœud parent des balises [URL][/URL] et [NOM][/NOM] et le nœud enfant de la balise [lstSite][/lstSite]).

'creation de la balise [SITE][/SITE]
elemSite = XmlDoc.CreateElement("SITE")

2) Créons ensuite nos balises [URL][/URL] et [NOM][/NOM]

elemUrl = XmlDoc.CreateElement("URL")
elemNom = XmlDoc.CreateElement("NOM")

3) Définissons les valeurs de nos balises [URL][/URL] et [NOM][/NOM]

elemUrl.InnerText = " http://www.peuw.net/index.xml "
elemNom.InnerText = " peuw.net "

4) Ajoutons les balises enfants à la balise parent :

elemSite.AppendChild(elemUrl)
elemSite.AppendChild(elemNom)

5) Ajoutons la balise parent au document Xml

'on ajoute la balise parent au document
XmlDoc.DocumentElement.AppendChild(elemSite)

6) Écrivons le schéma Xml

I-B - Code source

XmlDoc.Save(Application.StartupPath & "Newsite.XML")

Résumé du code

Dim elemSite As XmlElement
elemSite = XmlDoc.CreateElement("SITE")

'creation et definition de la balise url (enfant)
Dim elemUrl As XmlElement
elemUrl = XmlDoc.CreateElement("URL")
elemUrl.InnerText = " http://www.peuw.net/index.xml "

'creation et definition de la balise Nom (enfant)
Dim elemNom As XmlElement
elemNom = XmlDoc.CreateElement("NOM")
elemNom.InnerText = peuw.net

'ajout des 2 balises enfants a la balise parent
elemSite.AppendChild(elemUrl)
elemSite.AppendChild(elemNom)

'on ajoute la balise parent au document
XmlDoc.DocumentElement.AppendChild(elemSite)
'Ecriture du Xml
XmlDoc.Save(Application.StartupPath & "Newsite.XML")
MsgBox("Enregistrement réussi")

II - Lecture d'un fichier XML

Il est très aisé de lire un fichier Xml dont nous connaissons la structure.

La première chose à faire est de déclarer l'objet qui va contenir les données du fichier.

Les fichiers Xml ont un schéma bien défini et pour pouvoir le lire, nous devons nous servir du membre XmlDocument dépendant de la classe System.Xml.

'creation d'une nouvelle instance du membre xmldocument
Dim XmlDoc As XmlDocument = New XmlDocument()

L'instruction Load nous permet de charger les données du document Xml dans l'objet XmlDoc déclarer précédemment pour nous permettre de le lire.

XmlDoc.Load(Application.StartupPath & "Newsite.XML")

II-A - Extraction des données

Exemple de la structure de notre fichier XML :

<lstSite>
<SITE>
<URL>http://www.peuw.net/index.xml</URL>
<NOM>peuw.net</NOM>
</SITE>
<SITE>
<URL>http://www.poxx.net/index.xml</URL>
<NOM>poxx - Science Fair</NOM>
</SITE>
</lstSite>

Notre but est de récupérer les nœuds enfants [URL] [/URL] et [NOM][/NOM] des nœuds parents [SITE][/SITE] pour pouvoir lire leur valeur.

Intéressons-nous à la propriété DocumentElement qui représente la racine de l'arbre et qui grâce à sa méthode GetElementsByTagName va nous permettre de retourner sous forme de liste (XMLNodeList) tous les nœuds portant le nom passé en paramètre (dans notre cas « site »).

Exemple

Dim element As XmlNodeList
element = XmlDoc.DocumentElement.GetElementsByTagName("SITE")

Maintenant que nous avons notre liste (element (XmlNodeList)) de nœuds « parents » ; il nous reste plus qu'à récupérer tous les nœuds enfants.

element contient donc la liste de toutes les balises [SITE][/SITE], chaque balise étant représenté par un nœud.

Chaque nœud parent et enfant représente un XmlNode qu'il faut déclarer.

Dim noeud, noeudEnf As XmlNode

II-B - Le principe en cinq points

Pour lire les nœuds enfants, nous utiliserons la propriété ChildNodes qui nous retourne pour le nœud sélectionné la liste de ses nœuds enfants sous forme de XmlNode.

il ne nous reste plus qu'à vérifier sur quel nœud on se trouve pour récupérer sa valeur et la traiter.

On va donc :

- parcourir un a un tous les nœuds « parent » (nœud) compris dans la liste element ;

- pour chacun de ces nœuds, récupérer la liste des nœuds « enfants » (nœudEnf) ;

- parcourir un à un tous les nœuds enfants (nœudEnf) contenus dans cette liste ;

- récupérer grâce à la propriété LocalName le nom de la balise du nœud « enfant » sélectionné ;

- récupérer le contenu de la balise à l'aide de la propriété InnerText.

II-C - Code source

For Each noeud In element
For Each noeudEnf In noeud.ChildNodes
If noeudEnf.LocalName = "URL" Then
UrlSite = noeudEnf.InnerText
Else
If (noeudEnf.LocalName = "NOM") Then
NomSite = noeudEnf.InnerText
End If
End If
Msgbox(Nomsite & " à "  & UrlSite)
Next
Next