XML DOM Marc Chevaldonné marc.chevaldonne@u-clermont1.fr http://marc.chevaldonne.free.fr Année scolaire 2010-2011
DOM - Qu est-ce que c est? DOM = Document Object Model API pour accéder et utiliser des documents XML en tant que structures arborescentes défini par un ensemble de recommandations du W3C modèle objet indépendant du langage de programmation défini les objets, les propriétés et les méthodes pour y accéder (interface) stocke les documents hiérarchiques en mémoire XML DOM = standard sur : «comment accéder, changer, ajouter ou supprimer des éléments XML»
Les noeuds (Nodes) Pour DOM, tout ce qu il y a dans un document XML est un noeud (Node) Node Document Node : le document en entier Element Node : chaque élément XML Text Node : le texte dans un élément XML Attribute Node : chaque attribut Comment Node : chaque commentaire
L arbre de noeuds (node tree) - exemple
L arbre de noeuds (node tree) - exemple racine = root 1 parentnode par élément (sauf le root) 1 ou plusieurs sous-éléments (childnodes) par élément Les siblings sont les frères. Ce sont des noeuds avec le même père firstchild et lastchild
Parser DOM Un programme d analyse syntaxique XML DOM (DOM parser) transforme un document XML en arbre DOM document XML DOM parser arbre DOM L interface est indépendante du langage La même pour Java, C++, C, C#, JavaScript... L interface regroupe un ensemble de propriétés et de méthodes
Propriétés et méthodes Propriétés : représentent quelque chose dans l arbre DOM Méthodes : représentent une action sur l arbre DOM Exemples de propriétés : x.nodename : le nom du noeud x x.nodevalue : la valeur du noeud x x.parentnode : le père du noeud x x.childnodes : la liste des enfants du noeud x x.attributes : la liste des attributs du noeud x x.firstchild : le premier noeud fils du noeud x x.lastchild : le dernier noeud fils du noeud x x.previoussibling : le noeud précédent le noeud x et ayant le même père que x x.nextsibling : le noeud suivant le noeud x et ayant le même père que x x.namespaceuri : l espace de noms dans lequel le noeud x est qualifié x.prefix : le préfixe utilisé devant la partie locale du noeud x x.localname : partie locale du nom du noeud x
Propriétés et méthodes Propriétés : représentent quelque chose dans l arbre DOM Méthodes : représentent une action sur l arbre DOM Exemples de méthodes : x.getelementsbytagname(name) : récupèrent tous les éléments avec un nom de balise donné x.appendchild(node) : ajoute un sous-élément (node) au noeud x x.removechild(node) : retire un sous-élément (nodeà au noeud x x.getattributenode : récupère un attribut du noeud x x.setattribute : modifie ou ajoute un attribut du noeud x x.removeattribute : retire un attribut au noeud x doc.createelement : création d un élément dans le documentnode doc doc.createattribute : création d un attribut dans le documentnode doc
Propriétés et méthodes - exemple texte = xmldoc.getelementsbytagname(«disque»)[0].childnodes[1].childnodes[0].nodevalue muziq = xmldoc.getelementsbytagname(«artiste»)[1].childnodes[0].nodevalue où xmldoc représente le documentnode de l arbre texte =? ; muziq =? <?xml version="1.0" encoding="utf-8"?> <discothèque> <disque> <titre>a Love Supreme</titre> <artiste>john Coltrane</artiste> </disque> <disque nb="3"> <titre>retrospective</titre> <artiste>charlie Parker</artiste> </disque> </discothèque>
Propriétés et méthodes - exemple texte = xmldoc.getelementsbytagname(«disque»)[0].childnodes[1].childnodes[0].nodevalue muziq = xmldoc.getelementsbytagname(«artiste»)[1].childnodes[0].nodevalue où xmldoc représente le documentnode de l arbre texte = «A Love Supreme» ; muziq = «Charlie Parker» <?xml version="1.0" encoding="utf-8"?> <discothèque> <disque> <titre>a Love Supreme</titre> <artiste>john Coltrane</artiste> </disque> <disque nb="3"> <titre>retrospective</titre> <artiste>charlie Parker</artiste> </disque> </discothèque>
Accéder à un noeud en utilisant getelementsbytagname ( ) par itération sur tous les noeuds de l arbre (traversing) en navigant dans l arbre à l aide des liens entre les noeuds à l aide d un motif XPath (cf. semaine 6)
Liste de noeuds : Node List Cette interface permet d accéder au contenu d un noeud généralement utilisée pour rechercher des noeuds de texte ou des sous-éléments x.childnodes est de type NodeList x.getelementsbytagname ( ) est de type NodeList Liste ordonnée dans le même ordre que dans le document XML
Liste d attributs : Named Node Map Cette interface est utilisée pour des listes non triées dont le contenu est identifié par un nom => les attributs x.attributes est de type NamedNodeMap exemple : x.attributes.getnameditem(«blabla»).nodevalue accède au contenu de l attribut «blabla» du noeud x