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

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 27 :
Les nodes sont liés par un système hiérarchique :
 
<sourcesyntaxhighlight lang=php>
<p>Ce texte est <strong>important</strong></p>
</syntaxhighlight>
</source>
 
On dit alors que le node Tag &lt;strong> est fils du node &lt;p>
Ligne 41 :
Voici le code important la page.
 
<sourcesyntaxhighlight lang=php>
<?php
$doc = DOMDocument::loadHTMLFile("fichier.html");
?>
</syntaxhighlight>
</source>
 
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.
Ligne 51 :
NB : il est également possible d'avoir recours au code suivant.
 
<sourcesyntaxhighlight lang=php>
<?php
$doc = new DOMDocument();
$doc->loadHTMLFile("fichier.html");
?>
</syntaxhighlight>
</source>
 
 
Il est également possible d'importer le code à partir d'une chaîne de caractères :
 
<sourcesyntaxhighlight lang=php>
<?php
$code = "<html><head></head><body></body></html>";
Ligne 67 :
$doc->loadHTML( $code );
?>
</syntaxhighlight>
</source>
 
== Enregistrer une page ==
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 :
<sourcesyntaxhighlight lang=php>
$doc->saveHTMLFile("fichier.html");
</syntaxhighlight>
</source>
 
 
Si vous voulez l'afficher, il vous suffit d'exécuter la fonction suivante :
 
<sourcesyntaxhighlight lang=php>
<?php
echo $doc->saveHTML();
?>
</syntaxhighlight>
</source>
 
La méthode retourne une chaîne de caractères que la fonction <code>echo</code> affiche.
Ligne 88 :
{{attention|Le résultat n'est pas en Unicode, donc les lettres avec diacritiques seront mal affichées par défaut, en français : ''àâçéèêëîïôöüù''. Cela peut aussi générer un ''Warning: DOMDocumentFragment::appendXML(): Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding !''}}
 
<sourcesyntaxhighlight lang=php>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR">
<head>
Ligne 109 :
</body>
</html>
</syntaxhighlight>
</source>
 
== La classe DOMNode ==
Ligne 119 :
 
Voici les propriétés accessibles à tous les nodes :
<sourcesyntaxhighlight lang=php>
$node->nodeType // Type de node. Vaut 1 pour un élément XML, 3 pour un texte
$node->childNodes //Retourne un objet NodeList qui contient tout les éléments enfants de ce node
Ligne 126 :
$node->previousSibling // Retourne le node juste avant celui-ci
$node->nextSibling // Retourne le node juste après celui-ci
</syntaxhighlight>
</source>
 
Les méthodes sont les suivantes
Ligne 132 :
* '''AppendChild'''
Le node $enfant devient enfant de $node
<sourcesyntaxhighlight lang=php>
$node->appendChild( $enfant );
</syntaxhighlight>
</source>
 
* '''RemoveChild'''
Supprime le node $enfant du node $node
<sourcesyntaxhighlight lang=php>
$node->removeChild( $enfant );
</syntaxhighlight>
</source>
 
== La classe DOMElement ==
 
*Les éléments possèdent les propriétés suivantes :
<sourcesyntaxhighlight lang=php>
$node->tagName // par exemple "p" pour un paragraphe. Sa valeur ne peut être modifiée
</syntaxhighlight>
</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://php.net/manual/fr/class.domnode.php.
Ligne 155 :
 
- Méthodes d'attributs
<sourcesyntaxhighlight lang=php>
$node->hasAttribute(); //Renvoie true si il possède des attributs
$node->getAttribute("name"); //Retourne la valeur de l'attribut
Ligne 161 :
$node->setAttribute("name","value"); //Modifie un attribut
$node->getAttributeNode ("name" ); //Retourne un objet DOMAttr
</syntaxhighlight>
</source>
 
- Autres méthodes
<sourcesyntaxhighlight lang=php>
$newNode = $node->cloneNode(); //duplique un élément
 
$nodeList = $node->getElementsByTagName("strong");
</syntaxhighlight>
</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 :
<sourcesyntaxhighlight lang=php>
$strong5 = $nodeList->item(4); //Sélectionne la 5e balise <strong>
</syntaxhighlight>
</source>
 
L'attribut ''length'' donne le nombre d'éléments de la liste. Exemple :
<sourcesyntaxhighlight lang=php>
for ($i=0; $i<$nodeList->length; $i++)
{
echo $nodeList->item( $i )->tagName;
}
</syntaxhighlight>
</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 :
Ligne 193 :
 
La classe DOMText contient l'unique propriété suivante :
<sourcesyntaxhighlight lang="php">
$node->wholeText
</syntaxhighlight>
</source>
 
Elle n'est accessible qu'en lecture seule.
Ligne 201 :
La classe ''DOMText'' admet deux méthodes :
 
<sourcesyntaxhighlight lang="php">
/* Retourne true si la chaîne de caractère contient des espaces */
$node->isWhitespaceInElementContent();
</syntaxhighlight>
</source>
 
/* Retourne dans $end un objet Text qui contient la fin du texte de $node.
$node ne contiendra plus que les 5 premiers caractères de sa chaîne */
 
<sourcesyntaxhighlight lang="php">
$end = $node->splitText(5)
</syntaxhighlight>
</source>
 
Exemple :
 
<sourcesyntaxhighlight lang=php>
<?php
$doc = new DOMDocument();
Ligne 224 :
echo $text2->wholeText
?>
</syntaxhighlight>
</source>
Ce code retournera "je suis&lt;br /> celui qui est"
 
Ligne 232 :
Elle contient les propriétés suivantes :
 
<sourcesyntaxhighlight lang="php">
$node->name // Nom de l'attribut
$node->value // Valeur de l'attribut
Ligne 238 :
/* Nom de la balise qui contient l'attribut. La valeur retournée est un objet DOMElement */
$node->ownerElement
</syntaxhighlight>
</source>
Seule la propriété value n'est pas en lecture seule, c'est à dire qu'il est possible d'avoir recours au code suivant :
<sourcesyntaxhighlight lang=php>
$node->value = "maValeur";
</syntaxhighlight>
</source>
 
== Accéder à un node ==
Il existe plusieurs modes de recherche du node. Il est par exemple possible de le sélectionner par son id :
 
<sourcesyntaxhighlight lang=php>
$node = $doc->getElementById("sonId"); //Retourne un objet node
</syntaxhighlight>
</source>
 
Sachant qu'il ne peut y avoir qu'un node possédant l'id recherché, la méthode retournera un objet node au lieu d'un objet nodeList.
Ligne 255 :
Il est cependant possible de récupérer une liste de nodes en les sélectionnant par leur nom de balise. Évidemment, seuls les nodes Tag peuvent être sélectionnés.
 
<sourcesyntaxhighlight lang=php>
$nodeList = $doc->getElementsByTagName("acronym"); //Sélectionne toutes les balises <acronym>
</syntaxhighlight>
</source>
Comme nous l'avons déjà dit, il faut, pour récupérer un node particulier de la liste, utiliser la méthode suivante :
<sourcesyntaxhighlight lang=php>
$acronym5 = $nodeList->item(4); //Sélectionne le 5e node de la liste;
</syntaxhighlight>
</source>
 
== XML ==
<sourcesyntaxhighlight lang=php>
// Création
$xml = new DOMDocument("1.0", "ISO-8859-15");
Ligne 279 :
$nodes = $xml->getElementsByTagName("Node_2");
var_dump($nodes);
</syntaxhighlight>
</source>
 
==Références==