Cours

Accédez à nos cours concernant des domaines et thématiques différentes. Vous pouvez aussi contribuer en rédigeant des articles.

Consulter les cours

Écoles

Parcourez 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 écoles

Tchat

Accé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.”

Introduction à l’extension XMLWriter

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.

Créer un document XML avec PHP

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 :

Code PHP

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

Résultat

Voici le document XML produit :

<?xml version="1.0" encoding="ISO-8859-1"?>
<root><tag>value</tag></root>

Quelques explications

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 :

Créons notre fichier RSS

Déclaration XML et balise principale

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

Continuons

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>

Les items

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

Résultat

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.

Approfondissez votre lecture :

- XMLWriter - XML - PHP - RSS

Informations sur l'auteur

codeur
  • Pseudo : codeur
  • Date de naissance : 1985-10-03
  • Age : 40 ans
  • Pays : Maroc
  • école

Informations sur le cours

  • Nombre de fois vus : 5099
  • Langue de rédaction : Français
  • Date de création : le 04/05/2017 à 23:18:47
  • Date de mise à jour : le 04/05/2017 à 23:34:33

Aidez la Communauté des Étudiants !