« Programmation PHP/DOMDocument » : différence entre les versions

Contenu supprimé Contenu ajouté
Il est toujours conseillé d'avoir pris connaissance des pages précédentes + retrait d'un lien brisé
Ligne 11 :
 
== Qu'est-ce que DOMDocument ? ==
DOMDocument est une librairie de fonctions apparue avec PHP5<ref>http://php.net/manual/fr/book.dom.php</ref> et activée par défaut. Elle permet de concevoir des pages [[Programmation HTML|HTML]] sous forme d'[[../Programmation orientée objet|objets]]. Il est conseillé d'avoir pris connaissance du dossier sur la [[Programmation PHP/La programmation orientée objet|programmation orientée objet]]
 
== Les avantages et les inconvénients ==
Ligne 24 :
Cette librairie présente de nombreuses similitudes avec le javascript aussi bien dans le fonctionnement que dans le nom de ses fonctions.
 
LaLe DOM, (Document Object Model) est basée sur un système de nodes.
Un node est un élément qui est
- soit une balise (nodes Tag)
- soit du texte
- soit un attribut de balise
Les nodes sont liéesliés par un système hiérarchique :
 
<source lang=php>
Ligne 38 :
Le node texte "Ce texte est" est également fils de &lt;p> qui est parent du node texte.
 
Il existe un certain nombre de classes prédéfinies : DOMDocument, DOMNode, DOMElement, DOMText, DOMAttr, DOMList... Certaines sont très simplesimples, d'autres possèdent des fonctionnalités très avancées.
 
== Importer une page préexistante ==
 
Il est possible d'importer une page htmlHTML. Cela simplifiera considérablement la tâche du programmeur qui n'aura qu'à apporter les modifications nécessaires avant de l'afficher ou de réenregistrer la page.
Voici le code important la page.
 
<source lang=php>
<?php
$doc = DOMDocument::loadHTMLFile("filenamefichier.html");
?>
</source>
Ligne 53 :
La variable $doc contient donc un objet DOMDocument avec toutes les balises sous formes de nodes. Il est maintenant possible d'accéder aux nodes par le biais de fonctions préexistantes.
 
NB : Ilil est également possible d'avoir recours au code suivant :.
 
<source lang=php>
<?php
$doc = new DOMDocument();
$doc->loadHTMLFile("filenamefichier.html");
?>
</source>
Ligne 76 :
Un des grands avantages de cette librairie est la capacité à enregistrer la page générée dans un fichier pour un affichage ultérieur. Il suffit d'avoir recours au code suivant :
<source lang=php>
$doc->saveHTMLFile("filenamefichier.html");
</source>
 
Ligne 116 :
 
== La classe DOMNode ==
Les classes DOMElement, DOMText et DOMAttribute sont dérivées de cette classe. Ainsi, les méthodes et propriétés présentées ici seront disponibles pour leurs classes enfantfilles.
 
Attention : un node une fois créé ne se trouve pas dans le document. Ajouter un node va se dérouler en deux étapes :
- on crée le node
- on l'insère dans le node parent ou à la racine du document.
 
Voici les propriétés accessibles à tout les nodes
 
Voici les propriétés accessibles à touttous les nodes :
<source lang=php>
$node->nodeType // Type de node. Vaut 1 pour un élément XML, 3 pour un texte
Ligne 154 ⟶ 153 :
</source>
 
Attention : seules les principales propriétés sont présentées. Si vous voulez en avoir la liste complète, vous pouvez consulter la documentation de référence sur [http://www.nexenphp.net nexen]/manual/fr/class.domnode.php.
 
 
* Et les méthodes suivantes :
 
- Méthodes d'attributs
Ligne 174 ⟶ 173 :
$nodeList = $node->getElementsByTagName("strong");
</source>
Cette fonction retourne un objet ''nodeList'' qui contient une liste des balises &lt;strong> enfants du node. Pour récupérer le n+1ème node de la liste, il suffit d'avoir recours à la méthode de l'objet ''nodeList'' suivante :
<source lang=php>
$strong5 = $nodeList->item(4); //Sélectionne la 5e balise <strong>
</source>
 
L'attribut ''length'' donne le nombre d'éléments de la liste. Exemple :
<source lang=php>
for ($i=0; $i<$nodeList->length; $i++)
Ligne 186 ⟶ 185 :
}
</source>
Comme vous le savez, ''tagName'' retourne le nom de la balise. Ici, le code retournera "strongstrongstrong…". En effet, seuls les nodes ''strong'' ont "été sélectionné.
Comme vous avez pu le remarquer, il est possible d'exécuter plusieurs méthodes et propriétés en même temps. Voici l'ordre d'exécution :
 
- La méthode item( $i ) est exécutée et retourne un ''nodeTag''.
 
- La propriété ''tagName'' du node est appelée. Attention : c'est celle de l'objet retourné.
 
- La fonction ''echo'' affiche le nom de la balise retournéretournée par la propriété ''tagName''.
 
== La classe DOMText ==
Ligne 204 ⟶ 203 :
Elle n'est accessible qu'en lecture seule.
 
La classe ''DOMText'' admet deux méthodes :
 
<source lang="php">