Accédez à nos cours concernant des domaines et thématiques différentes. Vous pouvez aussi contribuer en rédigeant des articles.
Consulter les coursParcourez notre annuaire d’écoles, instituts et universités du monde. Si votre école n’est pas listée, vous pouvez l’ajouter très facilement.
Consulter les écolesAccédez à notre messagerie instantanée pour échanger avec d’autres membres inscrits et aussi les invités. Aucune inscription n’est obligatoire.
Accéder au tchat“Le présent article n'a pas encore été revu par un modérateur, pour cela veuillez faire attention quant à son contenu, que nous ne pouvons pas vous garantir son exactitude.”
XMLWriter est une extension PHP désormais disponible par défaut depuis la version 5.1.2 qui permet, comme son nom l'indique, de créer des documents XML. Cette extension peut être utilisée de manière procédurale ou orientée objet.
Dans cette petite introduction, nous verrons comment utiliser un certain nombre des méthodes de cette extension dans le but de créer un fichier RSS.
Pour comprendre le fonctionnement simple de cette extension, commençons directement par un morceau de code PHP permettant de créer un document XML basique.
Comme vous pouvez le constater, le nommage des méthodes est uniforme et explicite :
<?php
// Nouvelle Instance de la classe XMLWriter
$X = new XMLWriter();
// Nouveau XMLWriter en mémoire
$X->openMemory();
// Nouveau document XML 1.0 avec un encodage ISO-8859-1
$X->startDocument('1.0', 'ISO-8859-1');
// Tag principal : <root> [1]
$X->startElement ('root');
// Tag : <tag>value</tag>
$X->writeElement('tag' , 'value');
// [1] Fermeture du tag principal
$X->endElement();
// Affichage du résultat
echo $X->flush();
?>
Voici le document XML produit :
<?xml version="1.0" encoding="ISO-8859-1"?>
<root><tag>value</tag></root>
Voici les méthodes utilisées :
Simple, non ?
Et bien NON, car c'est encore plus simple ! Toutes les méthodes permettant de créer des éléments de notre fichier XML fonctionnent de la même manière, à savoir :
*** peut être :
Nous disposons donc, par exemple des méthodes :
En reprenant l'exemple précédent, nous allons créer la base de notre fichier RSS, à savoir la balise racine <rss version="2.0"> et la balise <title>
<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
<channel>
<title>value</title>
</channel>
</rss>
Quelles différences avec le code XML généré précédemment ?
Code PHP mis en œuvre
<?php
// Nouvelle Instance de la classe XMLWriter
$X = new XMLWriter;
// Nouveau XMLWriter en mémoire
$X->openMemory();
// On indente le code de sortie
$X->setIndent(true);
// Nouveau document XML 1.0 avec un encodage ISO-8859-1
$X->startDocument('1.0', 'ISO-8859-1');
// Tag principal : <rss> [1]
$X->startElement ('rss');
// On ecrit l'attribut : version="2.0"
$X->writeAttribute('version' , '2.0');
// Tag : <channel> [2]
$X->startElement ('channel');
// Tag : <title>Mon RSS</title>
$X->writeElement('title' , 'Mon RSS');
// [2] Fermeture du tag
$X->endElement();
// [1] Fermeture du tag principal
$X->endElement();
// Affichage du résultat
echo $X->flush();
?>
A partir de l'exemple précédent, ajoutons les balises <link> et <description> et un commentaire. Nous ajouterons également la déclaration de l'espace de nom dc.
XMLWriter::writeComment() : Ajoute le commentaire
<?php
$X = new XMLWriter();
$X->openMemory();
$X->setIndent(true);
$X->startDocument('1.0', 'ISO-8859-1');
// Un commentaire
$X->writeComment('XMLWriter - PHP5.2');
$X->startElement ('rss'); // [1]
$X->writeAttribute('version' , '2.0');
$X->writeAttribute('xmlns:dc' , 'http://purl.org/dc/elements/1.1/');
$X->startElement ('channel'); // [2]
// Tag : <title>
// Tag : <link>
// Tag : <description>
$X->writeElement('title' , 'Mon RSS');
$X->writeElement('link' , 'http://classes.Scriptsphp.org/rss');
$X->writeElement('Description' , 'Mon premier fil RSS');
// [1]
// [2]
$X->endElement();
$X->endElement();
// Affichage du résultat
echo $X->flush();
?>
Résultat :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--XMLWriter - PHP5.2-->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<title>Mon RSS</title>
<link>http://classes.Scriptsphp.org/rss</link>
<Description>Mon premier fil RSS</Description>
</rss>
Rajoutons les <item> de notre fichier RSS.
Pour l'exemple, nous allons supposer que les informations à insérer sont stockées dans un tableau PHP, nommé $infos.
Quelques nouvelles méthodes
<?php
// Informations à insérer dans le flux RSS
$infos[] = array(
'title' => 'Le buzz du web2.0',
'url' => 'http://classes.scriptsphp.org/plouf',
'description' => '......',
'date' => '2006-12-25'
);
$infos[] = array(
'title' => 'Nouveau site',
'url' => 'http://classes.scriptsphp.org/plouf/plaf',
'description' => '<p>du html</p>',
'date' => '2006-12-24'
);
// -------------------------------------------
$X = new XMLWriter();
// Nouvel XMLWriter dans un fichier
$X->openUri('test.xml');
$X->setIndent(true);
$X->startDocument('1.0', 'ISO-8859-1');
// PI
$X->writePi('xml-stylesheet' , 'type="text/css" href="/mon-style.css"');
$X->writeComment('XMLWriter - PHP5.2');
$X->startElement ('rss'); // [1]
$X->writeAttribute('version' , '1.0');
$X->writeAttribute('xmlns:dc' , 'http://purl.org/dc/elements/1.1/');
$X->startElement ('channel'); // [2]
$X->writeElement('title' , 'Mon RSS');
$X->writeElement('link' , 'http://classes.Scriptsphp.org/rss');
$X->writeElement('Description' , 'Mon premier fil RSS');
foreach($infos as $v) {
$X->startElement('item');
$X->writeElement('title' , $v['title']);
$X->writeElement('link' , $v['url']);
$X->startElement('description');
// Section CDATA
$X->writeCdata($v['description']);
$X->endElement();
$X->endElement();
}
// [2] Fermeture
$X->endElement();
// [1] Fermeture du tag principal
$X->endElement();
// Enregistrement du résultat
$X->flush();
?>
Nous obtenons bien un fichier nommé test.xml contenant le code suivant :
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="/mon-style.css"?>
<!--XMLWriter - PHP5.2-->
<rss version="1.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Mon RSS</title>
<link>http://classes.Scriptsphp.org/rss</link>
<Description>Mon premier fil RSS</Description>
<item>
<title>Le buzz du web2.0</title>
<link>http://classes.scriptsphp.org/plouf</link>
<description><![CDATA[......]]></description>
</item>
<item>
<title>Nouveau site</title>
<link>http://classes.scriptsphp.org/plouf/plaf</link>
<description><![CDATA[<p>du html</p>]]></description>
</item>
</channel>
</rss>
Et voilà, un beau document RSS.