Exploitation de données XML

Analyse du document XML

Télécharger les documents de travail ici.

Il n'existe pas une méthode universelle pour analyser un document XML. Il s'agit à chaque fois de bien comprendre comment le document est structuré, puis de faire preuve d'imagination. Il est toutefois évident que la maîtrise des outils favorisera le bon déroulement de l'opération.

La fonction de rappel

Commençons par installer la fonction de rappel. Dans le code ci-dessous, on récupère le statut de l'événement onLoad de l'objet XML dans le paramètre çava. Si la valeur du statut est true on affiche "ok" dans la fenêtre de sortie.

Version 1

 

function traitement(çava) {

if (çava) {

trace("ok") ;

}
else {

trace("Erreur au chargement du fichier") ;


}

}

Dans la suite des explications ci-dessous, le paramètre çava est remplacé par ok.

Extraction de l'élément racine

Examinons encore une fois le document XML contenant la liste des rois de France. L'élement racine du document est la balise <roisdefrance>. Il est possible d'extraire l'élément racine vers une variable en utilisant la propriété firstChild de l'objet XML :

Version 2

 

function traitement(ok) {

if (ok) {
racine = roisdefrance.firstChild ;
trace(racine) ;


}
else {
trace("Erreur au chargement du fichier") ;

}
}

Extraction des noeuds enfants de l'élément racine

Pour extraire les noeuds enfants de l'élément racine, on utilise la propriété childNodes qui renvoie un tableau ou collection (array) de noeuds. Dans l'exemple ci-dessous, la variable lesRois contient l'ensemble des éléments <rois> du document XML.

function traitement(ok) {
if (ok) {

racine = roisdefrance.firstChild ;
lesRois = racine.childNodes ; // renvoie un tableau vers lesRois
trace(lesRois) ;

}
else {
trace("Erreur au chargement du fichier") ;

}

}

Ce tableau dispose de la propriété length qui indique combien d'éléments il contient.

Version 3

 

function traitement(ok) {

if (ok) {
racine = roisdefrance.firstChild ;
lesRois = racine.childNodes ; // renvoie un tableau dans lesRois
trace("Nombre de rois : " + lesRois.length) ;
}
else {
trace("Erreur au chargement du fichier") ;
}

}

Séparation des noeuds enfants

Pour extraire séparément chacun des éléments <roi></roi>, on peut utiliser une boucle for

Version 4

 

function traitement(ok) {

if (ok) {

racine = roisdefrance.firstChild ;
lesRois = racine.childNodes ;
for (var i = 0 ; i < lesRois.length ; i++) {

trace(lesRois[i]) ;


}

}
else {
trace("Erreur au chargement du fichier") ;

}

}

Extraction du texte du noeud

Cette solution extrait les noeuds entiers, y compris les balises. Pour extraire le texte du noeud sans les balises, il faut accéder au premier enfant du noeud par la propriété firstChild.

Version 5

function traitement(ok) {
if (ok) {
racine = roisdefrance.firstChild ;
lesRois = racine.childNodes ;
for (var i = 0 ; i < lesRois.length ; i++) {
trace(lesRois[i].firstChild) ;

}

}
else {
trace("Erreur au chargement du fichier") ;

}

}

***