Les fichiers XML et VB.Net
Date de publication : 08/03/2005 ,
Date de mise a jour : 08/03/2005
Par
Selkis (selkis.developpez.com)
Création et Lecture un Fichier Xml à schéma connu en utilisant la classe XmlDocument
I. Création d'un fichier XML
I.A. Le principe en 6 points
II.B. Code source
II. Lecture d'un fichier XML
II.A. Extraction des données
II.B. Le principe en 5 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érence 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 part la propriété LoadXml
(Cree 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
'a savoir :
Dim elemSite As XmlElement
Dim elemUrl As XmlElement
Dim elemNom As XmlElement
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ée un nouveau nud (une nouvelle balise)
- .InnerText : Pour définir la valeur de la balise ( noeud)
- .AppendChild : pour ajouter le oeud à notre document (à la fin de la liste des enfants de ce noeud).
I.A. Le principe en 6 points
1) Créeons d'abord notre balise [SITE][/SITE] qui est en fait le nud parent des balises [URL][/URL] et
[NOM][/NOM] et le nud enfant de la balise [lstSite][/lstSite]).
'creation de la balise [SITE][/SITE]
elemSite = XmlDoc.CreateElement("SITE")
2) Créeons ensuite nos balises [URL][/URL] et [NOM][/NOM]
elemUrl = XmlDoc.CreateElement("URL")
elemNom = XmlDoc.CreateElement("NOM")
3) Définissons les valeur de nos balises [URL][/URL] et [NOM][/NOM]
elemUrl.InnerText = " http://www.peuw.net/index.xml "
elemNom.InnerText = " peuw.net "
4) ajouter les balises enfants à la balise parent,
elemSite.AppendChild(elemUrl)
elemSite.AppendChild(elemNom)
5) ajouter la balise parent au document Xml
'on ajoute la balise parent au document
XmlDoc.DocumentElement.AppendChild(elemSite)
6) Ecrire le schéma Xml
II.B. Code source
XmlDoc.Save(Application.StartupPath & "Newsite.XML")
Résumé du code Dim elemSite As XmlElement
elemSite = XmlDoc.CreateElement("SITE")
Dim elemUrl As XmlElement
elemUrl = XmlDoc.CreateElement("URL")
elemUrl.InnerText = " http://www.peuw.net/index.xml "
Dim elemNom As XmlElement
elemNom = XmlDoc.CreateElement("NOM")
elemNom.InnerText = peuw.net
elemSite.AppendChild(elemUrl)
elemSite.AppendChild(elemNom)
XmlDoc.DocumentElement.AppendChild(elemSite)
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 a faire est de déclarer l'objet qui va contenir les données du fichier.
Les fichier 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 nuds enfants [URL] [/URL] et [NOM][/NOM] des nuds parents
[SITE][/SITE] pour pouvoir lire leur valeur .
Intéressons nous a 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 nuds 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 nuds " parents "
il nous reste plus qu'a récupérer tous les nuds enfants.
element contient donc la liste de tous les balises [SITE][/SITE], chaque balise étant représenté
par un nud.
chaque nud parent et enfant représente un XmlNode qu'il faut déclarer.
Dim noeud, noeudEnf As XmlNode
II.B. Le principe en 5 points
Pour lire les noeud enfants nous utiliserons la propriété ChildNodes qui nous retourne pour le nud
sélectionné la liste des ses nuds enfants sous forme de XmlNode.
il ne nous reste plus qu'a vérifier sur quel nud on se trouve pour récupérer sa valeur et la traiter.
On va donc :
- Parcourir un a un tous les noeuds " parent " (noeud) compris dans la liste element
- Pour chaque un de ces noeuds, récupérer la liste des noeuds " enfants " (noeudEnf)
- Parcourir un a un tous les noeuds enfants (noeudEnf) contenu dans cette liste
- Récupérer grâce a la propriété LocalName le nom de la balise du noeud " 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
|