Chapitre 5
Manipulation de XML par PHP
SimpleXML
1
Introduction
XML est maintenant une norme largement acceptée et utilisée par un ensemble de
règles pour coder des documents sous une forme lisible par machine.
Le support XML a été pris plus au sérieux dans PHP 5 (2004) que dans PHP 4 (2000) et
PHP 3 (1998).
Dans cette présentation, nous allons nous concentrer sur le support XML en PHP 5 - la
dernière version de PHP 5.3.2.
2
PHP
HyperText Préprocesseur, un langage de script couramment utilisé côté serveur et
pouvant être intégré au format HTML. Il a été conçu à l’origine pour produire des
pages Web dynamiques.
Mais PHP peut maintenant créer une grande variété d’applications complexes de
petite taille ou à grande échelle.
Remarque: le nom PHP est dérivé des outils de la page d'accueil personnelle ou de
PHP / FI (comme dans PHP / FI 1.0 et 2.0).
3
Historique de PHP prenant en
charge XML
PHP 3 – SAX (Simple API for XML) parseur (analyseur XML)
PHP 4 – SAX + DOMXML
(non standard, rupture d'API, fuite de mémoire, fonctionnalité incomplète)
PHP 5 – SAX + DOM + SimpleXML
(Réécrit à partir de zéro)
4
SimpleXML
5
SimpleXML
SimpleXML est une extension de PHP5 permettantde manipuler simplement des documents
XML
SimpleXML permet:
- La lecture d’un fichier XML
• accès au contenu d’un fichier XML
• lecture des attributs d’un élément
• lecture d’un fichier à structure complexe
- Modification des valeurs des éléments et des attributs
- Recherche dans un fichier
- Création d‘un fichier XML à partir d’une table MySQL
- Création d’une table MySQL à partir d ‘un fichier XML
6
PHP SimpleXML : fonctions
SimpleXML gère les tâches XML les plus courantes
C'est un moyen facile d'obtenir les attributs et le contenu textuel d'un élément XML
SimpleXML prend seulement quelques lignes de code pour lire les données texte d'un
élément (Comparé à DOM et à l'analyseur Expat)
7
PHP SimpleXML : fonctions
SimpleXML Functions:
simplexml_import_dom — Obtenez un objet SimpleXMLElement à partir d'un nœud
DOM.
simplexml_load_file — Interprète un fichier XML dans un objet.
simplexml_load_string — Interprète une chaîne de XML dans un objet.
8
PHP SimpleXML : fonctions
SimpleXMLElement Class:
SimpleXMLElement::attributes — Identifie les attributs d'un élément.
SimpleXMLElement::addAttribute — Ajoute un attribut dans un SimpleXML
element
SimpleXMLElement::addChild — Ajoute un element enfant dans un nœud XML
SimpleXMLElement::asXML — Renvoie une chaîne XML bien formée basée sur
un élément SimpleXML
9
PHP SimpleXML : fonctions
SimpleXMLElement Class:
SimpleXMLElement::children — cherche les enfants d'un nœud donné
SimpleXMLElement::construct —Crée un nouvel objet SimpleXMLElement
SimpleXMLElement::count — Compte les enfants d'un élément
SimpleXMLElement::getDocNamespaces — Retourne les espaces de noms
déclarés dans le document.
SimpleXMLElement::xpath — Exécute une requête XPath sur des données XML
SimpleXMLElement::getName — Obtient le nom de l'élément XML
10
PHP SimpleXML : Accès au éléments
En PHP, l'opérateur -> est utilisé pour référencer un objet à ses propriétés. L'opérateur équivalent en
Java est "." (point) et dans XPath est "/". Dans une arborescence d'objets XML, chaque élément est une
propriété de son parent.
Si $x est un élément
$x->getName() est le nom de l'élément - sa balise
$x->y est la séquence de y enfants
$x->y[0] c’est le premier fils y
foreach ($x->y as $y) {.. } itère sur les y enfants
$x->children() Est la sequence de tous les enfants de $x
$x->xpath(...) évaluer une expression Xpath
$x->attributes() Est la sequence de tous les attributs de x
$x->attributes()->z c’est l’attribut z de l’élément x
foreach ($x->attributes() as $att {.. } itère sur les attributs de l’élément $x
11
Lecture d’un fichier XML
Accès au contenu d’un fichier XML à l’aide de la fonction simplexml_load_file:
Object simplexml_load_file (string nom_fichier)
Object simplexml_load_string (string $code)
Exemple
$xml=simplexml_load_file("biblio.xml");
12
Lecture d’un fichier XML
1. simplexml_load_file
<?xml version="1.0" encoding="UTF-8"?>
<?php <biblio>
<livre editeur= "FAYARD " prix= "20.00 ">
$xml = simplexml_load_file( "biblio.xml");
<titre>L'empire de la honte </titre>
echo $xml->livre[0]->titre , "<br>";
<auteur>Jean Ziegler</auteur>
echo $xml->livre[0]->auteur , "<br>"; <date>2005</date>
echo $xml->livre[0]->date , "<br>"; </livre>
<livre editeur= "GALLIMARD " prix= "18.00 ">
?> test1.php <titre> Ritournelle de la faim </titre>
Resultat <auteur>J.M.G Le Clézio</auteur>
<date>2008</date>
</livre>
…..
</biblio> biblio.xml
13
Lecture d’un fichier XML
2. simplexml_load_string <?php
$xmlstr = <<<XML
<?php
<?xml version="1.0" encoding="UTF-8"?>
include 'biblio.php'; <biblio>
$biblio = new SimpleXMLElement($xmlstr); <livre editeur= "FAYARD " prix= "20.00 ">
<titre>L'empire de la honte </titre>
echo $biblio->livre[0]->titre , "<br>";
<auteur>Jean Ziegler</auteur>
echo $biblio->livre[0]->auteur , "<br>"; <date>2005</date>
echo $biblio->livre[0]->date , "<br>"; </livre>
<livre editeur= "GALLIMARD " prix= "18.00 ">
?> test2.php
<titre> Ritournelle de la faim </titre> …. </livre>
</biblio>
XML;
Resultat
?> biblio.php
14
Lecture des éléments
3. simplexml_load_string & foreach
<?php
include 'biblio.php' ;
$biblio = new SimpleXMLElement($xmlstr);
//Lecture du contenu des éléments
$i=1;
foreach ($biblio->livre as $livre){
echo "livre $i "; Resultat
echo $livre->titre, ' de ' , $livre->auteur, ' paru en ' , $livre-
>date , '<hr/>';
$i++;
}
?> lirexml.php
15
Lecture des attributs
4. SimpleXMLElement::attributes
Accès aux attributs d’un fichier XML à l’aide de la fonction attributes ():
<?php
include 'biblio.php';
$biblio = new SimpleXMLElement($xmlstr);
foreach ($biblio->livre as $val){
echo '<h3>', $val->titre, ' de ' , $val->auteur, '</h3>', ' <b>
paru en ' , $val->date , ' </b>';
foreach ($val->attributes() as $att => $valatt) {
echo "<b> $att : $valatt </b>";
} Resultat
echo "<hr/>";
} ?> lirexmlatt.php
16
Lecture d’un fichier structure complexe
5. SimpleXMLElement::children
<?php
include 'biblio.php';
$biblio = new SimpleXMLElement($xmlstr);
foreach($biblio->children() as $element=>$val){
echo "<h3>", ucfirst($element) ,": $val</h3>";
foreach($val->children() as $element=>$val){
echo " $element : <b>$val</b><br/>";
}
} Resultat
children.php
?>
17
Lecture d’un fichier
6. SimpleXMLElement::getName
<?php
include 'biblio.php';
$biblio = new SimpleXMLElement($xmlstr);
echo $biblio->getName() , ": ";
Resultat
foreach($biblio->livre->attributes() as $Attr) {
echo $Attr->getName() ,"=" , $Attr , " ";
?>
test.php
18
Utilisation de XPATH
6. SimpleXMLElement::xpath
<?php
include 'biblio.php';
$biblio = new SimpleXMLElement($xmlstr);
foreach ($biblio->xpath(‘//livre') as $livre) {
echo $livre->titre, ” de l’auteur ”, $livre->auteur; Resultat
?> xpath1.php
19
Utilisation de XPATH
6. SimpleXMLElement::xpath
<?php
include 'biblio.php';
$biblio = new SimpleXMLElement($xmlstr);
Resultat
foreach ($biblio->xpath(‘//livre[2]') as $livre) {
echo $livre->titre, ’ de l’auteur ’, $livre->auteur;
?> xpath2.php
20
Attribuer des valeurs
7. Modifier des valeurs
<?php
$biblio = new SimpleXMLElement(biblio.xml);
$biblio->livre[0]->titre = ’lala land';
echo $biblio->asXML();
?> changeval.php
Resultat
21
Ajouter des éléments et des attributs
8. SimpleXMLElement::addChild / addAttribute
<?php
include 'biblio.php';
$biblio = new SimpleXMLElement($xmlstr);
// Add a child element to the livre element
$biblio->livre->addChild("Number","50");
// Add a child element after the last element inside note
$livre=$biblio->addChild("livre");
$livre->addChild("titre","Nvtitre");
$livre->addChild("auteur","Nvauteur"); Resultat
$livre->addChild("date","date1");
$editeur = $biblio->livre[3]->addAttribute("editeur",
"Nvediteur");
foreach ($biblio->livre[3]->attributes() as $att => $valatt) {
echo "<b> $att : $valatt </b> <br/>";
}
echo $biblio-> asXML();
?>
22
addchild.php
Ajouter des éléments et des attributs
9. Sauvegarder les modifications
<?php
<?xml version="1.0" standalone="yes"?>
include 'biblio.php'; <biblio>
$biblio = new SimpleXMLElement($xmlstr); ….
// Add a child element to the livre element <livre editeur="Nvediteur">
$biblio->livre->addChild("Number","50"); <titre>Nvtitre</titre>
// Add a child element after the last element inside note <auteur>Nvauteur</auteur>
$livre=$biblio->addChild("livre"); <date>date1</date>
$livre->addChild("titre","Nvtitre"); </livre>
$livre->addChild("auteur","Nvauteur");
</biblio> Nvbiblio.xml
$livre->addChild("date","date1");
$editeur = $biblio->livre[3]->addAttribute("editeur", "Nvediteur");
Resultat
foreach ($biblio->livre[3]->attributes() as $att => $valatt) {
echo "<b> $att : $valatt </b> <br/>";
}
echo $biblio-> asXML(‘Nvbiblio.xml’);
?>
addchild.php
23
Attribuer des valeurs
10. SimpleXMLElement::count
<?php
include 'biblio.php';
$biblio = new SimpleXMLElement($xmlstr);
$i=1;
foreach ($biblio->livre as $livre)
{
Resultat
echo $livre->getName(), " $i contient " ,
$livre->count() , " noeuds <br/>";
$i++;
}
?> count.php
24