IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Les fichiers XML et VB.Net

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]

Article lu   fois.

L'auteur

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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

 
Sélectionnez
 <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.

 
Sélectionnez
'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.

 
Sélectionnez
'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 :

 
Sélectionnez
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]).

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

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

 
Sélectionnez
elemUrl = XmlDoc.CreateElement("URL")
elemNom = XmlDoc.CreateElement("NOM")

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

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

4) Ajoutons les balises enfants à la balise parent :

 
Sélectionnez
elemSite.AppendChild(elemUrl)
elemSite.AppendChild(elemNom)

5) Ajoutons la balise parent au document Xml

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

6) Écrivons le schéma Xml

I-B. Code source

 
Sélectionnez
XmlDoc.Save(Application.StartupPath & "Newsite.XML")

Résumé du code

 
Sélectionnez
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.

 
Sélectionnez
'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.

 
Sélectionnez
XmlDoc.Load(Application.StartupPath & "Newsite.XML")

II-A. Extraction des données

Exemple de la structure de notre fichier XML :

 
Sélectionnez
 <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

 
Sélectionnez
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.

 
Sélectionnez
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

 
Sélectionnez
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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

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