Utilisation de base SimpleXML
Plusieurs exemples de ce chapitre requièrent une chaîne XML. Plutôt que de la répéter à chaque exemple, nous allons la placer dans un fichier que nous inclurons dans chacun d'entre eux. Le contenu de ce fichier est illustré par l'exemple qui suit. Autrement, vous pouvez créer un document XML et le lire avec simplexml_load_file().
Exemple #1 Fichier avec une chaîne XML qui sera inclus partout
<?php $xmlstr = <<<XML <?xml version='1.0' standalone='yes'?> <movies> <movie> <title>PHP: Behind the Parser</title> <characters> <character> <name>Ms. Coder</name> <actor>Onlivia Actora</actor> </character> <character> <name>Mr. Coder</name> <actor>El ActÓr</actor> </character> </characters> <plot> So, this language. It's like, a programming language. Or is it a scripting language? All is revealed in this thrilling horror spoof of a documentary. </plot> <great-lines> <line>PHP solves all my web problems</line> </great-lines> <rating type="thumbs">7</rating> <rating type="stars">5</rating> </movie> </movies> XML; ?>
La simplicité de SimpleXML apparaît plus clairement lorsqu'on essaye d'extraire une chaîne ou un nombre d'un document XML basique.
Exemple #2 Lecture de <plot>
<?php include 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie[0]->plot; ?>
<?php include 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie->{'great-lines'}->line; ?>
<?php include 'example.php'; $movies = new SimpleXMLElement($xmlstr); /* Pour chaque <character>, nous affichons un <name>. */ foreach ($movies->movie->characters->character as $character) { echo $character->name, ' played by ', $character->actor, PHP_EOL; } ?>
<?php include 'example.php'; $movies = new SimpleXMLElement($xmlstr); /* Accès au node <rating> du premier <movie>. * Affichage des attributs de <rating> également. */ foreach ($movies->movie[0]->rating as $rating) { switch((string) $rating['type']) { // Récupération des attributs comme indices d'éléments case 'thumbs': echo $rating, ' thumbs up'; break; case 'stars': echo $rating, ' stars'; break; } } ?>
<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);
if ((string) $movies->movie->title == 'PHP: Behind the Parser') {
print 'My favorite movie.';
}
echo htmlentities((string) $movies->movie->title);
?>
<?php
include 'example.php';
$movies1 = new SimpleXMLElement($xmlstr);
$movies2 = new SimpleXMLElement($xmlstr);
var_dump($movies1 == $movies2); // retourne false depuis PHP 5.2.0
?>
<?php include 'example.php'; $movies = new SimpleXMLElement($xmlstr); foreach ($movies->xpath('//character') as $character) { echo $character->name, 'played by ', $character->actor, PHP_EOL; } ?>
<?php include 'example.php'; $movies = new SimpleXMLElement($xmlstr); $movies->movie[0]->characters->character[0]->name = 'Miss Coder'; echo $movies->asXML(); ?>
<?php include 'example.php'; $movies = new SimpleXMLElement($xmlstr); $character = $movies->movie[0]->characters->addChild('character'); $character->addChild('name', 'Mr. Parser'); $character->addChild('actor', 'John Doe'); $rating = $movies->movie[0]->addChild('rating', 'PG'); $rating->addAttribute('type', 'mpaa'); echo $movies->asXML(); ?>
<?php
$dom = new DOMDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!$dom) {
echo 'Erreur lors de l\'analyse du document';
exit;
}
$books = simplexml_import_dom($dom);
echo $books->book[0]->title;
?>
L'exemple ci-dessus va afficher :
blah