6.Le langage PHP
6.17.Parser un document XML
6.17.3.A partir de l'arbre DOM
6.17.3.1.Chargement de l'arbre DOM
L'analyse d'un flux XML à partir de son arbre DOM passe par l'instanciation d'un objet
[c'est quoi?] DOMDocument. Une fois l'objet instancié, il est possible de charger un flux XML via la méthode
-
load() si le flux XML est dans un fichier (ou URL, etc.)
-
loadXML() si le document XML est passé sous forme de chaîne de caractères
-
loadHTMLFile() si le flux XML est dans un fichier qui contient en fait du code HTML (dans ce cas, le document source n'est pas nécessairement valide d'un point de vue XML et les corrections nécessaires sont alors apportées tant bien que mal)
-
loadHTML() si le document XML est passé sous forme de chaîne de caractères qui contient en fait du code HTML (dans ce cas, le document source n'est pas nécessairement valide d'un point de vue XML et les corrections nécessaires sont alors apportées tant bien que mal)
|
En cas d'erreur, ces fonctions "load" retourneront FALSE.
Autrement dit, parser un document XML avec DOM commence par quelque chose comme
<?php
$fichier = "monfichier.xml";
$dom = new DOMDocument();
if (!$dom->load($fichier)) {
echo "Impossible de charger le fichier XML";
}
?>
ou
<?php
$xml = '<?xml version="1.0"?><racine>...</racine>';
$dom = new DOMDocument();
if (!$dom->loadXML($fichier)) {
echo "Impossible de charger le fichier XML";
}
?>
6.17.3.2.Recherche d'une balise dans l'arbre DOM
Une fois l'arbre chargé, il est possible d'atteindre la ou les balises portant un nom donné via la méthode
getElementsByTagName(). Cette méthode retourne alors une liste de noeuds sous forme d'un objet
DOMNodeList. Cette objet propose, entre autres, les attributs et méthodes suivants:
-
length indiquant le nombre d'entrées dans la liste
-
item($nb) permettant d'accéder à l'entrée $nb (sachant que la première entrée a l'index 0)
|
Pour déterminer le nombre d'articles dans le flux RSS, il faut rechercher les balises <item>
<?php
$fichier = "http://www.phpfacile.com/exemples_live/fluxrss.rss";
$dom = new DOMDocument();
if (!$dom->load($fichier)) {
die("Impossible de charger le fichier XML");
}
$itemList = $dom->getElementsByTagName("item");
echo "Il y a ".$itemList->length." articles dans le flux RSS";
?>
Ce qui donne
Il y a 3 articles dans le flux RSS
6.17.3.3.Données d'un noeud DOM
Le contenu textuel d'une balise peut être obtenu via l'attribut nodeValue d'un noeud (lorsque le noeud est de type "element" ce qui est le cas pour les noeuds retournés par getElementsByTagName()).