Les fichiers XML (Partie 2)
-=Partie 2=- Lecture d?un fichier Xml à schéma connu utilisation de la classe XmlDocument
|
|
Vu
10000
fois
|
Imports System.Xml
LECTURE
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 membres 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") |
EXTRACTION DES DONNEES
Exemple de la structure de notre fichier XML :
(les balise d?ouverture et fermeture sont remplacées par " [" et " ] " )
XmlDocument
|
[lstSite] (debut du flux rss)
[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] (fin du flux Rss) |
|
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 a la propriété DocumentElement qui représente la racine de l?arbre et qui grâce a 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?a récupérer tous les n?uds enfants.
element contient donc la liste de tous 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 n?ud, noeudEnf As XmlNode |
Pour lire les n?uds enfants nous utiliserons la propriété ChildNodes qui nous retourne pour le n?ud sélectionné la liste des ses n?uds enfants sous forme de XmlNode.
il ne nous reste plus qu?a 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 chaque un de ces n?uds, récupérer la liste des n?uds " enfants " (noeudEnf)
- Parcourir un a un tous les n?uds enfants (noeudEnf) contenu dans cette liste
- Récupérer grâce a 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.
Ce qui nous donne :
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
|
|