« Programmation PHP/DOMDocument » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
m <source> -> <syntaxhighlight> (phab:T237267) |
||
Ligne 27 :
Les nodes sont liés par un système hiérarchique :
<
<p>Ce texte est <strong>important</strong></p>
</syntaxhighlight>
On dit alors que le node Tag <strong> est fils du node <p>
Ligne 41 :
Voici le code important la page.
<
<?php
$doc = DOMDocument::loadHTMLFile("fichier.html");
?>
</syntaxhighlight>
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.
<
<?php
$doc = new DOMDocument();
$doc->loadHTMLFile("fichier.html");
?>
</syntaxhighlight>
Il est également possible d'importer le code à partir d'une chaîne de caractères :
<
<?php
$code = "<html><head></head><body></body></html>";
Ligne 67 :
$doc->loadHTML( $code );
?>
</syntaxhighlight>
== 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 :
<
$doc->saveHTMLFile("fichier.html");
</syntaxhighlight>
Si vous voulez l'afficher, il vous suffit d'exécuter la fonction suivante :
<
<?php
echo $doc->saveHTML();
?>
</syntaxhighlight>
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 !''}}
<
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR">
<head>
Ligne 109 :
</body>
</html>
</syntaxhighlight>
== La classe DOMNode ==
Ligne 119 :
Voici les propriétés accessibles à tous les nodes :
<
$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>
Les méthodes sont les suivantes
Ligne 132 :
* '''AppendChild'''
Le node $enfant devient enfant de $node
<
$node->appendChild( $enfant );
</syntaxhighlight>
* '''RemoveChild'''
Supprime le node $enfant du node $node
<
$node->removeChild( $enfant );
</syntaxhighlight>
== La classe DOMElement ==
*Les éléments possèdent les propriétés suivantes :
<
$node->tagName // par exemple "p" pour un paragraphe. Sa valeur ne peut être modifiée
</syntaxhighlight>
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
<
$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>
- Autres méthodes
<
$newNode = $node->cloneNode(); //duplique un élément
$nodeList = $node->getElementsByTagName("strong");
</syntaxhighlight>
Cette fonction retourne un objet ''nodeList'' qui contient une liste des balises <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 :
<
$strong5 = $nodeList->item(4); //Sélectionne la 5e balise <strong>
</syntaxhighlight>
L'attribut ''length'' donne le nombre d'éléments de la liste. Exemple :
<
for ($i=0; $i<$nodeList->length; $i++)
{
echo $nodeList->item( $i )->tagName;
}
</syntaxhighlight>
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 :
<
$node->wholeText
</syntaxhighlight>
Elle n'est accessible qu'en lecture seule.
Ligne 201 :
La classe ''DOMText'' admet deux méthodes :
<
/* Retourne true si la chaîne de caractère contient des espaces */
$node->isWhitespaceInElementContent();
</syntaxhighlight>
/* 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 */
<
$end = $node->splitText(5)
</syntaxhighlight>
Exemple :
<
<?php
$doc = new DOMDocument();
Ligne 224 :
echo $text2->wholeText
?>
</syntaxhighlight>
Ce code retournera "je suis<br /> celui qui est"
Ligne 232 :
Elle contient les propriétés suivantes :
<
$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>
Seule la propriété value n'est pas en lecture seule, c'est à dire qu'il est possible d'avoir recours au code suivant :
<
$node->value = "maValeur";
</syntaxhighlight>
== Accéder à un node ==
Il existe plusieurs modes de recherche du node. Il est par exemple possible de le sélectionner par son id :
<
$node = $doc->getElementById("sonId"); //Retourne un objet node
</syntaxhighlight>
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.
<
$nodeList = $doc->getElementsByTagName("acronym"); //Sélectionne toutes les balises <acronym>
</syntaxhighlight>
Comme nous l'avons déjà dit, il faut, pour récupérer un node particulier de la liste, utiliser la méthode suivante :
<
$acronym5 = $nodeList->item(4); //Sélectionne le 5e node de la liste;
</syntaxhighlight>
== XML ==
<
// Création
$xml = new DOMDocument("1.0", "ISO-8859-15");
Ligne 279 :
$nodes = $xml->getElementsByTagName("Node_2");
var_dump($nodes);
</syntaxhighlight>
==Références==
|