&reftitle.examples;
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.
Fichier avec une chaîne XML qui sera inclus partoutPHP: Behind the ParserMs. CoderOnlivia ActoraMr. CoderEl ActÓr
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.
PHP solves all my web problems75
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.
Lecture de <plot>
movie[0]->plot;
?>
]]>
&example.outputs;
L'accès aux éléments d'un document XML qui contient des caractères non permis par
rapport à la convention de nommage de PHP (e.g. les mots clés) est possible
en encapsulant le nom de l'élément entre crochets et apostrophes.
Récupération de <line>
movie->{'great-lines'}->line;
?>
]]>
&example.outputs;
Accéder à un élément non-unique avec SimpleXML
Lorsque plusieurs instances d'un élément existent en tant que fils d'un
élément père unique, les techniques normales d'itération peuvent être
appliquées.
, nous affichons un . */
foreach ($movies->movie->characters->character as $character) {
echo $character->name, ' played by ', $character->actor, PHP_EOL;
}
?>
]]>
&example.outputs;
Les propriétés ($movies->movie dans notre précédent exemple)
ne sont pas des tableaux. Ceux sont des objets
itérables et
accessibles.
Utilisation des attributs
Jusque là, nous n'avons couvert que la lecture des noms d'éléments et
leurs valeurs. SimpleXML peut aussi atteindre leurs attributs.
L'accès aux attributs d'un élément se fait de la même façon que l'accès
aux éléments d'un tableau.
du premier .
* Affichage des attributs de é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;
}
}
?>
]]>
&example.outputs;
Comparaison des éléments et des attributs avec du texte
Pour comparer un élément ou un attribut avec une chaîne de caractères
ou pour le passer à une fonction qui nécessite une chaîne de caractères,
vous devez le transtyper en une chaîne en utilisant
(string).
Sinon, PHP traitera l'élément comme un objet.
movie->title == 'PHP: Behind the Parser') {
print 'My favorite movie.';
}
echo htmlentities((string) $movies->movie->title);
?>
]]>
&example.outputs;
Comparaison de 2 éléments
Deux objets SimpleXMLElement
sont considérés comme différents même s'ils
pointent vers le même élément.
]]>
&example.outputs;
Utilisation de XPath
SimpleXML inclut le support embarqué de XPath.
Pour trouver tous les éléments <character> :
xpath('//character') as $character) {
echo $character->name, ' played by ', $character->actor, PHP_EOL;
}
?>
]]>
'//' sert de joker. Pour spécifier un chemin absolu,
enlevez un slash.
&example.outputs;
Attribuer des valeurs
Les données dans SimpleXML n'ont pas à être constantes. L'objet permet
la manipulation de tous ces éléments.
movie[0]->characters->character[0]->name = 'Miss Coder';
echo $movies->asXML();
?>
]]>
&example.outputs;
PHP: Behind the ParserMiss CoderOnlivia ActoraMr. CoderEl ActÓr
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.
PHP solves all my web problems75
]]>
Ajout d'éléments et d'attributs
SimpleXML est capable d'ajouter facilement des
enfants et des attributs.
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();
?>
]]>
&example.outputs;
PHP: Behind the ParserMs. CoderOnlivia ActoraMr. CoderEl ActÓrMr. ParserJohn Doe
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.
PHP solves all my web problems75PG
]]>
Interopérabilité DOM
PHP possède un mécanisme pour convertir les nœuds XML entre les formats
SimpleXML et DOM. Cet exemple montre comment changer un élément DOM en
SimpleXML.
loadXML('blah');
if (!$dom) {
echo 'Erreur lors de l\'analyse du document';
exit;
}
$books = simplexml_import_dom($dom);
echo $books->book[0]->title;
?>
]]>
&example.outputs;
Traitement des erreurs XML
Le traitement des erreurs XML lors du chargement d'un document est
une tâche simple. En utilisant les fonctionnalités
libxml, il est possible de supprimer
toutes les erreurs XML lors du chargement d'un document, puis, de les parcourir.
L'objet libXMLError, retourné par la fonction
libxml_get_errors, contient plusieurs propriétés
dont le message,
la ligne et la
colonne (position) de l'erreur.
Chargement de chaînes XML cassées");
if ($sxe === false) {
echo "Erreur lors du chargement du XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
?>
]]>
&example.outputs;
' expected
Opening and ending tag mismatch: xml line 1 and broken
Premature end of data in tag broken line 1
]]>
&reftitle.seealso;
libxml_use_internal_errorslibxml_get_errors