TUTORIEL PHP 
PHP5 : SimpleXML
SimpleXML est une des deux nouvelles extensions de PHP 5 consacrées à XML, et présente une approche du traitement des fichiers XML mettant en avant la simplicité d'utilisation. (22/09/2004)

(fourni par Direction PHP)

<< 1. Introduction
2. Analyse du code XML
3. Accès aux données XML et aux attributs
4. SimpleXML et XPath
5. Recherche de balise et gestion des espaces de noms

SimpleXML et XPath
Une autre fonctionnalité intéressante de SimpleXML est sa capacité à interpréter des chemins XPath, pour naviguer dans le code XML ou d'effectuer des recherches.

Le chemin XPath représente la hiérarchie de balises nécessaires pour atteindre une balise spécifique, placée dans le code XML. On peut faire le parallèle avec les chemins utilisés dans les systèmes de fichiers, et d'ailleurs, la syntaxe est la même. Prenons un exemple :

<a>
  <b>
    <c>texte</c>
    <c>autre texte</c>
  </b>
  <d>
    <c>contenu</c>
  </d>
</a>


Les balises A, B et D ci-dessus peuvent être considérées comme des 'dossiers', qui contiennent la balise C. Ainsi, le dossier B contient deux fichiers C, et le dossier D en contient un. C est considéré ici comme un fichier, car cette balise ne contient que du texte ; mais elle pourrait à nouveau contenir d'autres balises, et être elle-même un dossier. Toujours en suivant l'analogie du système de fichiers, la balise A devient la racine de notre document XML.

Pour atteindre le contenu des balises C, on peut donc utiliser la notation XPath suivante :
/a/b/c
La méthode xpath() de la ressource SimpleXML retourne alors un tableau avec le contenu de chaque balise C ainsi décrite.

<?php
$string = <<<XML
<a>
<b>
<c>texte</c>
<c>autre texte</c>
</b>
<d>
<c>contenu</c>
</d>
</a>
XML;
$xml = simplexml_load_string($string);

/* On cherche <a><b><c> */
$result = $xml->xpath('/a/b/c');

print_r($result);
?>


Ce script va afficher :

Array
(
  [0] => SimpleXMLElement Object
    (
      [0] => texte
    )

  [1] => SimpleXMLElement Object
    (
      [0] => autre texte
    )
)


xpath() a retourné les objets SimpleXMLElement, avec lequel nous pouvons à nouveau travailler comme depuis la racine obtenue avec la fonction simplexml_load_string().

D'ailleurs, les chemins relatifs fonctionnent aussi avec la méthode xpath(). Lorsque le premier caractère du chemin XPath est /, le chemin indiqué est relatif à la racine du document XML. Si le premier élément est un nom de balise, alors le chemin XPath sera calculé relativement à la balise courante.

La méthode xpath() effectue aussi les recherches de toutes les balises qui satisfont le chemin indiqué. Tous les objets sont retournés dans l'ordre dans lequel ils ont été trouvés, quelles que soient les balises parentes. Ainsi

<?php
$string = <<<XML
<a>
  <b>
    <c>autre texte</c>
    <c>
      <d>texte</d>
      <d>texte2</d>
    </c>
    <c>
      <d>texte3</d>
      <d>texte4</d>
    </c>
  </b>
  <d>
    <c>contenu</c>
  </d>
</a>
XML;
$xml = simplexml_load_string($string);

/* On cherche <a><b><c> */
$result = $xml->xpath('/a/b/c/d');

print_r($result);
?>


Ce script retourne un tableau de 4 objets SimpleXMLElement, puisque 2 balises C distinctes contiennent des balises D. Après la recherche, il n'est plus possible de faire la différence entre les balises C parentes. Notez que la première balise C, qui ne contient pas de balise D a été ignorée.

<< 1. Introduction
2. Analyse du code XML
3. Accès aux données XML et aux attributs
4. SimpleXML et XPath
5. Recherche de balise et gestion des espaces de noms
 
Rédaction JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages