Programmation Web : DOM en PHP Jérôme CUTRONA jerome.cutrona@univ-reims.fr 13:34:00 Programmation Web 2018-2019
Introduction 13:34:00 Programmation Web 2018-2019
DOM = Document Object Model API (Application Programming Interface) pour la manipulation de HTML / XML Définit la structure logique des documents Définit la façon d’y accéder, de la manipuler Créer des documents Parcourir leur structure Ajouter, effacer, modifier des éléments Ajouter, effacer, modifier leur contenu 13:34:00 Programmation Web 2018-2019
Qu’est-ce que le DOM ? Représentation arborescente du document Modèle objet (structure + méthodes) Permet la manipulation du document Des implémentations : JavaScript PHP Java … 13:34:00 Programmation Web 2018-2019
En JavaScript 13:34:00 Programmation Web 2018-2019
Exemple XML DOM JavaScript <?xml version="1.0" encoding="UTF-8" ?> <liste> <animal idani="AC001-03"> <noman>Aquilon</noman> <visites>1</visites> </animal> <animal idani="AC001-01"> <noman>Bobo</noman> <visites>3</visites> </liste> 13:34:00 Programmation Web 2018-2019
Exemple XML DOM JavaScript liste ¶·· ¶ <?xml·version="1.0" ······encoding="UTF-8"·?>¶ <liste>¶ ··<animal·idani="AC001-03">¶ ····<noman>Aquilon</noman>¶ ····<visites>1</visites>¶ ··</animal>¶ ··<animal·idani="AC001-01">¶ ····<noman>Bobo</noman>¶ ····<visites>3</visites>¶ </liste>¶ ¶·· animal idani="AC001-03" animal idani="AC001-01" ¶···· ¶·· ¶···· ¶·· noman visites noman visites ¶···· ¶···· Aquilon 1 Bobo 3 13:34:00 Programmation Web 2018-2019
Exemple XML DOM JavaScript loadXMLDoc() .documentElement liste ¶·· ¶ .getElementsByTagName( 'animal') ¶·· animal idani="AC001-03" animal idani="AC001-01" [0] .getAttribute('idani') ¶···· ¶·· ¶···· ¶·· .getElementsByTagName( 'noman')[0] noman visites noman visites .firstChild ¶···· ¶···· .nodeValue Aquilon 1 Bobo 3 13:34:00 Programmation Web 2018-2019
Exploiter des données au format XML Objet XML : getElementsByTagName(n) Collection de nœuds Collection de nœuds : length nombre d'éléments [x] accès au xéme élément Nœud : firstChild Premier fils childNodes Collection de fils hasChildNodes() Possède des fils ? nodeValue Valeur du nœud nodeName Nom du nœud getAttribute(a) Valeur de l'attribut 13:34:00 Programmation Web 2018-2019
En PHP 13:34:00 Programmation Web 2018-2019
DOM PHP API DOM orientée objet en PHP Principales classes : DOMNode DOMElement DOMText DOMDocument DOMNodeList Permettent la lecture ou la création d’un fichier XML ou HTML Utilise la table de caractères utf-8 utiliser iconv et les fonctions mb_* 13:34:00 Programmation Web 2018-2019
Classe DOMNode Nœud de l’arbre DOM Principaux attributs : public readonly string $nodeName ; public string $nodeValue ; public readonly int $nodeType ; public readonly DOMNode $parentNode ; public readonly DOMNodeList $childNodes ; public readonly DOMNode $firstChild ; 13:34:00 Programmation Web 2018-2019
Classe DOMNode Principales méthodes : DOMNode appendChild ( DOMNode $newnode ) bool hasAttributes ( void ) bool hasChildNodes ( void ) DOMNode insertBefore ( DOMNode $newnode [, DOMNode $refnode ] ) DOMNode removeChild ( DOMNode $oldnode ) DOMNode replaceChild ( DOMNode $newnode , DOMNode $oldnode ) 13:34:00 Programmation Web 2018-2019
Classe DOMElement Nœud balise de l’arbre DOM Hérite de DOMNode Principal attribut propre : readonly public string $tagName ; Principales méthodes propres : string getAttribute ( string $name ) DOMNodeList getElementsByTagName ( string $name ) bool hasAttribute ( string $name ) bool removeAttribute ( string $name ) DOMAttr setAttribute ( string $name , string $value ) void setIdAttribute ( string $name , bool $isId ) 13:34:00 Programmation Web 2018-2019
Classe DOMDocument Représente un document HTML ou XML entier Hérite de DOMNode Principales méthodes : bool loadHTMLFile ( string $ filename ) mixed load ( string $filename [, int $options = 0 ] ) string saveHTML ( void ) string saveXML ([ DOMNode $node [, int $options ]] ) DOMElement createElement ( string $name [, string $value ] ) DOMAttr createAttribute ( string $name ) DOMText createTextNode ( string $content ) DOMElement getElementById ( string $elementId ) DOMNodeList getElementsByTagName ( string $name ) 13:34:00 Programmation Web 2018-2019
Classe DOMNodeList Collection de nœuds DOM Résultat des recherches effectuées avec DOMNodeList getElementsByTagName ( string $name ) des classes DOMElement et DOMDocument Principal attribut : readonly public int $length ; Principale méthode : DOMNode item ( int $index ) 13:34:00 Programmation Web 2018-2019
Précisions importantes 13:34:00 Programmation Web 2018-2019
Informations générales Le DOM est une API générale, ne dépendant pas d’un langage Les classes et méthodes sont très similaires quel que soit le langage utilisé Les spécificités de chaque langage doivent cependant être respectés (syntaxe !) Les fichiers XML ne sont pas forcément validés avant exploitation Ne pas faire trop de suppositions quant à l’ordre des balises : getElementsByTagName 13:34:00 Programmation Web 2018-2019
Le cas getElementsByTagName Dans beaucoup de cas, la navigation dans le DOM se fera en cherchant des éléments à partir de leur nom collection getElementsByTagName(nom_élément) Méthode de la classe noeudDOM Retourne une collection = un tableau contenant 0 à n éléments getElementsByTagName n’existe pas 13:34:00 Programmation Web 2018-2019