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 XmlNodeII-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


