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);