Ce cours vous est offert par XMLFacile !
Merci de respecter le travail des auteurs en gardant cette mention.
D'autres cours de ce genre sont disponibles sur le site XMLFacile! (www.xmlfacile.com)
L'API DOM (Document Object Model) - XML Facile!
7.L'API DOM (Document Object Model)
7.1.Introduction
L'API DOM (Document Object Model, autrement dit Modèle objet de document) décrit un ensemble de méthodes et classes (elle se base en effet sur la programmation orienté objet
[c'est quoi?]) permettant de naviguer et de créer un document de type XML (voire HTML).
Les spécifications du W3C ne proposent pas d'implémentation: libre à chaque éditeur (et langage) de proposer sa propre bibliothèque.
Nous ne nous intéresserons (dans un premier temps du moins) qu'aux méthodes de parcours d'un document existant (au détriment des méthodes de création).
7.2.Le document de référence
Afin d'illustrer nos explications nous nous appuierons sur le document XML suivant:
<?xml version="1.0"?>
<livre revision="3.2">
<chapitre xml:id="chap1">
<page>Chapitre 1 - Page 1</page>
</chapitre>
<chapitre xml:id="chap2" nom="api dom">
<page>Chapitre 2 - Page 1</page>
<page>Chapitre 2 - Page 1</page>
</chapitre>
</livre>
7.3.L'objet Document
Document est l'objet par lequel commence toute manipulation d'un arbre DOM (REM: Selon l'implémentation son nom peut varier légèrement. Cette classe peut également s'appeler DOMDocument par exemple).
Cet objet présente, entre autres, les attributs et méthodes suivantes:
- documentElement
- getElementById()
- getElementsByTagName()
L'attribut documentElement pointe sur l'élément racine du document (i.e. <livre> dans notre exemple).
La méthode
getElementById() permet de retrouver dans l'arbre, l'élément ayant pour identifiant (id) la chaîne de caractères passée en paramètre.
|
- Pour un document HTML, l'identifiant est précisé par l'attribut "id"
- Pour un document XML, l'identifiant est précisé par l'attribut "id" mais avec le préfix "xml" (soit l'attribut complet "xml:id")
|
La méthode getElementsByTagName() permet de retrouver dans l'arbre, l'ensemble des balises ayant pour nom la chaîne de caractères passée en paramètre.
L'objet Document hérite en outre des méthodes de la classe Node que nous allons voir plus loin.
Ces attributs et méthodes retournent donc un objet Element ou NodeList pour ce qui concerne getElementsByTagName().
7.4.L'objet NodeList
NodeList est un objet contenant une liste de noeuds (typiquement retournée par getElementsByTagName()).
Cet objet offre:
- l'attribut length qui précise le nombre de noeud dans la liste
- la méthode item() qui permet de récupérer le noeud (objet Node) dont l'index est passé en paramètre (le premier étant à l'index 0)
Dans le cas d'une liste de noeud récupérée via getElementsByTagName() l'ensemble des noeuds sont des objets Element (ce qui est rendu possible par le fait que la classe Element hérite de la classe Node).
7.5.L'objet Element
Element est un objet décrivant une balise.
Cet objet propose les attributs et méthodes suivants:
- tagName qui contient le nom de la balise (sous forme d'une chaîne de caractères).
- getAttribute() qui retourne la valeur de l'attribut dont le nom est passé en paramètre.
-
getElementsByTagName() à un rôle identique à la méthode du même nom de l'objet Document mais ne s'applique qu'aux balises enfants de la balise selectionnée.
Si l'on reprend l'exemple, alors
- l'attribute tagName de l'attribut documentElement de l'objet Document (document.documentElement.tagName) retournera "livre"
- la méthode getAttribute("revision") de l'attribut documentElement de l'objet Document (document.documentElement.getAttribute("revision")) retournera "3.2"
- l'attribute tagName appliqué au résultat de la méthode getElementById("chap2") de l'objet Document (document.getElementById("chap2").tagName) retournera "chapitre"
- la méthode getAttribute("nom") appliqué au résultat de la méthode item(1) appliqué au résultat de la méthode getElementsByTagName("chapitre") (document.getElementsByTagName("chapitre").item(1).getAttribute("nom")) retournera "api dom"
L'objet Element hérite en outre des méthodes de la classe Node que nous allons voir.
7.6.L'objet Node
Node est un objet décrivant différents éléments d'un document. Ce peut être une balise (Element) mais aussi un attribut, le texte (d'une balise), un commentaire, une instruction de traitement, etc..
Cet objet expose, entre autres, les attributs et méthodes suivants:
-
nodeType qui contient le type du noeud
- 1 (ELEMENT_NODE) s'il s'agit d'une balise.
- 2 (ATTRIBUTE_NODE) s'il s'agit d'un attribut.
- 3 (TEXT_NODE) s'il s'agit d'un texte.
- ... etc ...
-
nodeName qui contient le nom du noeud (dans le cas d'un noeud de type ELEMENT_NODE, nodeName contient le nom de la balise).
-
nodeValue qui contient la valeur du noeud (dans le cas d'un noeud de type ELEMENT_NODE, nodeValue contient le texte de la balise).
-
parentNode qui contient le noeud parent.
-
childNodes qui contient la liste des noeuds fils sous forme d'un objet NodeList.
-
firstChild qui contient le premier noeud fils.
-
lastChild qui contient le dernier noeud fils.
-
ownerDocument qui pointe sur l'objet Document auquel appartient le noeud.
Ce cours vous est offert par XMLFacile !
Merci de respecter le travail des auteurs en gardant cette mention.
D'autres cours de ce genre sont disponibles sur le site XMLFacile! (www.xmlfacile.com)