IBM : XML pour les développeurs PHP (Partie 1)
Par David KAPOLA, vendredi 2 mars 2007 à 12:23 :: Lu sur le Web :: #3074 :: rss
Il est difficile d’ignorer l’importance de l’XML dans l’environnement de développement d’aujourd’hui. IBM propose, à ceux qui n’ont pas encore eu l’occasion d’utiliser XML dans des développements PHP, ou qui n’ont pas encore franchi le pas vers PHP 5, un guide permettant d’utiliser les nouvelles fonctionnalités de PHP 5 pour l’XML.
XML (Extensible Markup Language) est un langage à balises. Il sert de format à un certain nombre de formats comme par exemple le RSS (Really Simple Syndication) entre autres.
Ecrire de l’XML
L'unité de base d’un flux XML est l'élément. Chaque élément est défini par une balise de début (par ex <book> ) et une balise de fin (par ex </book>). Le document sera dit « mal-formé » si il manque une balise de début ou de fin d’élément. Les balises sont généralement nommées pour décrire leur contenu.
Voici un exemple de document XML :
<books>
<book>
<title>Great American Novel</title>
<characters>
<character>
<name>Cliff</name>
<desc>really great guy</desc>
</character>
<character>
<name>Lovely Woman</name>
<desc>matchless beauty</desc>
</character>
<character>
<name>Loyal Dog</name>
<desc>sleepy</desc>
</character>
</characters>
<plot>
Cliff meets Lovely Woman. Loyal Dog sleeps, but wakes up to bark
at mailman.
</plot>
<success type="bestseller">4</success>
<success type="bookclubs">9</success>
</book>
</books>
Les noms d’éléments et d’attributs peuvent comprendre des lettres majuscules ou minuscules de A à Z ainsi que des chiffres de 0 à 9, certains caractères spéciaux et non-anglais, ainsi que trois signes de ponctuation : le trait d'union, le tiret-bas (underscore) , et les deux points « : ». Les autres signes de ponctuation dans les noms ne sont pas autorisés.
XML est sensible à la casse, ainsi
En plus de l'emboîtement des éléments qui créent les rapports parents-fils, les éléments de XML peuvent également avoir des attributs. Les attributs sont des paires de nom-valeur attachées à la balise du début d'un élément. Des noms sont séparés des valeurs par un signe égal, =. Dans l’exemple ci-dessus, l'élément de <success> possède deux attributs, « best-sellers » et « bookclubs ».
PHP 5 et XML
PHP5 inclut des extensions totalement réécrites et nouvelles , telles SimpleXML, XMLReader, XMLWriter, et le processeur de XSLT.
Des nombreuses APIs sont disponibles dans PHP 5, DOM et SimpleXML sont les plus familières.
DOM (Document Object Model) est un ensemble d’objets aux normes W3C utilisé pour représenter des documents de HTML et de XML. DOM est facile à comprendre et à utiliser puisque sa structure ressemble au document XML original. Pour transmettre l'information à l'application, DOM crée un arbre d’objets qui reproduit exactement l'arbre des éléments du fichier XML. Puisque DOM construit un arbre du document entier, il emploie beaucoup de mémoire et de temps de processeur. Par conséquent, les temps d'exécution le rendent impraticable pour analyser de grands documents XML.
L’extension SimpleXML est l'outil de référence pour analyser un document XML. Cette extension exige PHP5 et inclut l'interopérabilité avec DOM pour les écrire des fichiers XML. SimpleXML fonctionne mieux avec des documents XML peu compliqués.
Utilisation de DOM
<?php
//Création du flux XML et du fichier XML en utilisant DOM
$dom = new DomDocument('1.0');
//ajout de l’élément principal - <books>
$books = $dom->appendChild($dom->createElement('books'));
//ajout de l’élément <book> à l’élement <books>
$book = $books->appendChild($dom->createElement('book'));
// ajout de l’élément <title> à l’élement <book>
$title = $book->appendChild($dom->createElement('title'));
// ajout de l’élément texte <title> à l’élément <title>
$title->appendChild($dom->createTextNode('Great American
Novel'));
//génération du flux xml
$dom->formatOutput = true; // définition du format de sortie à « true »
// Sauvegarde de l’XML en tant que flux texte ou fichier
$test1 = $dom->saveXML(); // sauvegarde du flux dans la varialbe $test1
$dom -> save('test1.xml'); // sauvegarde en tant que fichier
?>
Fichier généré
<?xml version="1.0"?>
<books>
<book>
<title>Great American Novel</title>
</book>
</books>
L’exemple suivant est l’import d’un objet SimpleXMLElement dans un objet DOMElement, illustrant l'interopérabilité de DOM et SimpleXML.
<?php
$sxe = simplexml_load_string('<books><book><title>Great American
Novel</title></book></books>');
if ($sxe === false) {
echo 'Error while parsing the document';
exit;
}
$dom_sxe = dom_import_simplexml($sxe);
if (!$dom_sxe) {
echo 'Error while converting XML';
exit;
}
$dom = new DOMDocument('1.0');
$dom_sxe = $dom->importNode($dom_sxe, true);
$dom_sxe = $dom->appendChild($dom_sxe);
echo $dom->saveXML('test2.xml');
?>
La fonction suivante prend un noeud d'un document DOM et le transforme en un nœud dans SimpleXML. Vous pouvez alors employer ce nouvel objet comme élément de SimpleXML. Si des erreurs se produisent, elle renvoie la valeur FALSE.
<?php
$dom = new domDocument;
$dom->loadXML('<books><book><title>Great American
Novel</title></book></books>');
if (!$dom) {
echo 'Error while parsing the document';
exit;
}
$s = simplexml_import_dom($dom);
echo $s->book[0]->title; // Great American Novel
?>
Utilisation de SimpleXML
Le code ci-dessous est un flux XML formaté dans un fichier PHP nommé example.php. Ce fichier sera appelé dans les exemples suivants.
<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<books>
<book>
<title>Great American Novel</title>
<characters>
<character>
<name>Cliff</name>
<desc>really great guy</desc>
</character>
<character>
<name>Lovely Woman</name>
<desc>matchless beauty</desc>
</character>
<character>
<name>Loyal Dog</name>
<desc>sleepy</desc>
</character>
</characters>
<plot>
Cliff meets Lovely Woman. Loyal Dog sleeps, but wakes up to bark
at mailman.
</plot>
<success type="bestseller">4</rating>
<success type="bookclubs">9</rating>
</book>
</books>
XML;
?>
Exemple d’extraction d’un nœud
<?php include 'example.php'; $xml = new SimpleXMLElement($xmlstr); echo $xml->book[0]->plot; // affiche "Cliff meets Lovely Woman. Loyal Dog..." ?>
Extraire différentes instances d'un élément
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
/* Pour chaque nœuds de l’élément <book> on affiche l’élément <plot>. */
foreach ($xml->book as $book) {
echo $book->plot, '<br />';
}
?>
En plus des noms d'élément et de leurs valeurs, SimpleXML peut également accéder à des attributs d'élément.
Démonstration d’accès aux attributs d’un élément par SimpleXML :
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
/* Accès au nœud <success> du premier livre.
foreach ($xml->book[0]->success as $success) {
switch((string) $success['type']) { // Récupération des attributs
case 'bestseller':
echo $success, ' months on bestseller list';
break;
case 'bookclubs':
echo $success, ' bookclub listings';
break;
}
}
?>
Pour comparer un élément ou un attribut avec une chaîne, ou pour le passer dans une fonction qui requiert une chaîne de caractères, vous devez le convertir en type « string ». Par défaut PHP traite l ‘élément comme un objet comme le démontre l’exemple suivant :
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
if ((string) $xml->book->title == 'Great American Novel') {
print 'My favorite book.';
}
htmlentities((string) $xml->book->title);
?>
L’exemple suivant va générer un nouveau fichier XML en remplaçant la chaîne de caractère « Cliff » par « Bif Cliff ».
<?php include 'example.php'; $xml = new SimpleXMLElement($xmlstr); $xml->book[0]->characters->character[0]->name = 'Big Cliff'; echo $xml->asXML(); ?>
Depuis PHP 5.1.3, SimpleXML permet d’ajouter facilement des éléments fils ou des attributs.
L’exemple suivant va généré un fichier XML basé sur un document XML existant , en y ajoutant des élément
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
$character = $xml->book[0]->characters->addChild('character');
$character->addChild('name', 'Yellow Cat');
$character->addChild('desc', 'aloof');
$success = $xml->book[0]->addChild('success', '2');
$success-> $rating->addAttribute('type', 'reprints');
echo $xml->asXML();
?>
Conclusion
Ce premier article d’une série en trois parties, démontre que l’utilisation de SimpleXML (couplé en cas de besoin avec DOM) est le choix idéal pour traiter des document XML bien-formés et peu compliqués. PHP 5 a considérablement amélioré la capacité pour un développeur PHP à travailler avec XML.
La partie 2 se concentrera sur des techniques avancées d’analyses de fichiers XML.
Voir l'article complet






Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Vous pouvez soumettre un commentaire en remplissant le formulaire ci-dessous. Toutes les contributions font l'objet d'une étape de modération par notre équipe.
Le code HTML dans le commentaire sera affiché comme du texte, les adresses internet seront converties automatiquement.