Le modèle d'objet de doxument (DOM) XML est désormais supporté par le langage PHP à l'aide d'un extension spécifique.
Les fonctions sont disponibles à partir du moment où PHP est configuré avec l'option --with-dom=[répertoire] et si la librairie GNOME xml library est utilisée.
La création d'un objet DOMDocument s'effectue par l'intermédiaire de la fonction xmldoc.
$chaine_XML = '<?xml version="1.0"?>' . '<element_racine>' . ' Texte dans la racine' . ' <noeud_enfant>Contenu textuel</noeud_enfant>' . ' <autre_noeud_enfant attribut="Valeur"/> . '</element_racine>'; $doc_xml = xmldoc($chaine_XML);
Il est également possible de créer un objet DOMDocument à partir d'un fichier externe en utilisant la fonction xmldocfile.
$fichier_xml = "fichier.xml"; $doc_xml = xmldocfile($fichier_xml);
Ensuite, l'extraction d'informations relatives à l'objet DOMDocument peuvent être réalisée par le biais de ses méthodes ou de ses propriétés.
// Obtenir le noeud racine $noeud_racine = domxml_root($doc_xml); // Obtenir les noeuds attributs $attributs = domxml_attributes($doc_xml); // Obtenir les noeuds enfants $noeuds_enfants = domxml_children($doc_xml); // retourne le nom de l'objet DOMDocument echo $doc_xml->name; // retourne le type de l'objet DOMDocument echo $doc_xml->type; // retourne le contenu textuel de l'objet DOMDocument $tab_enfants = $doc_xml->children; echo $tab_enfants[0]->content;
De la même façon, chacune de ces méthodes et propriétés peut être appliquée à chaque noeud extrait du document XML.
for ($i = 0; $i < sizeof($noeuds_enfants); $i++) { $type_noeud = $noeuds_enfants[$i]->type; if ($type_noeud == XML_TEXT_NODE) echo '<h2>Contenu : ' . $noeuds_enfants[$i]->content . '<br>'; else { $noeud = $noeuds_enfants[$j]->children; echo '<h2>Nom :' . $noeuds_enfants[$i]->name . '<br>'; if ($noeud[0]->type == XML_TEXT_NODE) echo 'Contenu : ' . $noeud[0]->content . '<br>'; } echo 'Type : ' . $type_noeud . '</h2>'; if ($type_noeud == XML_ELEMENT_NODE) { $attributs = domxml_attributes($noeuds_enfants[$i]); echo '<h3>Les attributs du noeud ' . $noeuds_enfants[$i]->name . '</h3>'; for($j = 0; $j < sizeof($attributs); $j++) { $noeud_texte = $attributs[$j]->children; echo 'Nom :' . $attributs[$j]->name . '<br>' . 'Type : ' . $attributs[$j]->type . '<br>' . 'Contenu : ' . $noeud_texte[0]->content . '<br>'; } } }
La création des documents XML, de ses noeuds et de ses attributs, peut s'accomplir par des fonctions spécialisées.
// Création d'un document XML vide $doc_xml_vide = domxml_new_xmldoc("1.0"); // Création du noeud racine pour le document XML $ref_racine = domxml_add_root($doc_xml_vide, "element_racine"); // Création d'un enfant du noeud racine $ref_enfant = domxml_new_child("element_enfant", "valeur du noeud"); // Création d'un attribut pour le noeud enfant $ref_attribut = domxml_set_attribute($ref_enfant, "nom_attribut", "valeur de l'attribut");
La fonction dumpmem permet finalement de créer le document XML dans une chaîne de caractères.
$chaine_XML = domxml_dumpmem($doc_xml_vide);
Cette chaîne de caractères XML pourra être sauvegardée dans un fichier à l'aide des fonctions de système de fichiers ou directement affichée dans le navigateur du client.
// Création d'un fichier en lecture et écriture $id_fichier = fopen("document.xml", "a+"); rewind($id_fichier); // Ecriture de la chaîne XML dans le fichier fwrite($id_fichier, $chaine_XML); // Affichage du contenu du fichier echo fread($id_fichier, filesize($id_fichier)); fclose($id_fichier);
Par ailleurs, la fonction xmltree permet de transformer l'arborescence d'un document XML en un tableau PHP.
$tab_xml = xmltree($doc_xml);
Enfin, les expressions XPath sont supportées par le biais de deux fonctions, l'une créant un contexte à partir du document XML et l'autre étant chargée d'évaluer l'expression puis de retourner un tableau de valeurs.
Sommaire$obj_contexte = xpath_new_context($dom_xml); $tab_resultat = xpath_eval($obj_contexte);