Découvrez l'extension SimpleXML fournie avec PHP version 5, qui permet aux pages PHP d'interroger, de rechercher, de modifier et de republier du XML dans une syntaxe compatible avec PHP.
PHP version 5 introduit SimpleXML, une nouvelle interface de programmation d'application (API) pour lire et écrire du XML. En SimpleXML, l'expression suivante :
$doc->rss->channel->item->title
Sélectionnez des éléments du document. Cette expression est facile à écrire à condition de connaître la structure du document. Toutefois, s'il n'est pas clair où apparaissent les éléments requis (comme dans les Docbooks, HTML et documents narratifs similaires), SimpleXML peut utiliser des expressions XPath pour rechercher ces éléments.
Premiers pas avec SimpleXML
Supposons que vous ayez besoin d'une page PHP pour convertir un flux RSS en HTML. RSS est un format XML simple pour publier du contenu lié. L'élément racine du document est rss, qui contient un élément canal. L'élément canal contient des métadonnées sur le flux, telles que le titre, la langue et l'URL. Il contient également divers rapports encapsulés dans l'élément item. Chaque élément comporte un élément de lien, qui contient une URL, et un titre ou une description (généralement les deux), qui contient du texte brut. Aucun espace de noms n'est utilisé. Le RSS offre certainement bien plus que cela, mais cela suffit pour cet article. Le listing 1 montre un exemple typique, qui contient deux actualités.
Listing 1. Flux RSS
<?xml version="1.0" encoding="UTF-8"?>
<version rss="0.92">
<canal>
<title>Mokka avec Schlag</title>
<link>http://www.elharo.com/blog</link>
<langue>fr</langue>
<élément>
<title>Penn Station : disparu mais pas oublié</title>
<description>
L’ancienne Penn Station de New York a été démolie avant ma naissance.
En regardant ces photos, cela ressemble à une erreur. Le site actuel est.
fonctionnel, mais sans plus, juste quelques tours de bureaux et sous-sol ;
des couloirs sans intérêt ni beauté particulière. Le nouveau Madison Square...
</description>
<link>http://www.elharo.com/blog/new-york/2006/07/31/penn-station</link>
</article>
<élément>
<title>Personnel pour Elliotte Harold</title>
<description>Certaines personnes utilisent des filtres anti-spam très odieux qui vous obligent à
pour taper une chaîne aléatoire dans votre sujet, comme E37T, pour passer.
Inutile de dire que ni moi ni la plupart des autres ne prenons la peine de communiquer avec
ces paranoïaques réagissent de manière excessive au problème du spam.
Personnellement, je ne le ferai pas...</description>
<link>http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/</link>
</article>
</canal>
</rss>
Développons une page PHP pour formater un flux RSS en HTML. Le listing 2 montre la structure de base de cette page.
Listing 2. Structure statique du code PHP
<?php // Charger et analyser le document XML ?>
<html xml:lang="fr" lang="fr">
<tête>
<title><?php // Le titre sera lu depuis le RSS ?></title>
</tête>
<body>
<h1><?php // Le titre sera relu depuis le RSS ?></h1>
<?php
// Ici, nous allons mettre une boucle pour inclure le titre et la description de chaque élément
?>
</corps>
</html>
Analyser un document XML
La première étape consiste à analyser le document XML et à l'enregistrer dans une variable. Il suffit d'une ligne de code, en passant une URL à la fonction simplexml_load_file() :
$rss = simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');
Pour cet exemple, j'ai rempli la page à partir du flux New York Times de Userland (à l' adresse http://partners.userland.com/nytRss/nytHomepage.xml ). Bien entendu, n’importe quelle URL vers un autre flux RSS peut également être utilisée.
Notez que même si son nom est simplexml_load_file(), cette fonction analyse en réalité un document XML sur une URL HTTP distante. Mais ce n’est pas la seule chose étrange à propos de cette fonction. La valeur de retour (stockée ici dans la variable $rss) ne pointe pas vers l'intégralité du document, comme on pourrait s'y attendre si vous avez utilisé d'autres API telles que le modèle objet de document (DOM). Au lieu de cela, il pointe vers l'élément racine du document. Le contenu du prologue et de l'épilogue du document n'est pas accessible depuis SimpleXML.
Rechercher le titre du flux
Le titre de l'ensemble du flux (et non les titres des histoires individuelles dans le flux) se trouve dans le titre enfant du canal de l'élément racine RSS. Il est facile de trouver le titre comme si le document XML était une forme sérialisée d'un objet de classe rss, son champ de canal ayant lui-même un champ de titre. En utilisant la syntaxe de référence d'objet PHP standard, l'instruction permettant de trouver le titre est la suivante :
$title = $rss->channel->title;
Une fois trouvé, il peut être ajouté au HTML de sortie. Faire cela est simple, faites simplement écho à la variable $title :
<title><?php echo $title ?></title>;
Cette ligne affiche la valeur de chaîne de l'élément plutôt que l'élément entier. C'est-à-dire que le contenu du texte est écrit mais les balises ne sont pas incluses.
Vous pouvez même ignorer complètement la variable intermédiaire $title :
<title><?php echo $rss->channel->title ?></title>;
Étant donné que la page réutilise cette valeur à plusieurs endroits, je trouve plus pratique de la stocker dans une variable ayant une signification claire.
…