INFO0406 Arnaud Renard arnaud.renard@univ-reims.fr Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 1 / 44
Introduction / Rappels XML Extensible Markup Language Transporter et stocker des données (encodage) Langage de description (cf Latex) Arborescence (cf Html) Éléments, attributs (frères, père, fils) Document bien formé (Well Formed) XML documents must have a root element XML elements must have a closing tag XML tags are case sensitive XML elements must be properly nested XML attribute values must be quoted DTD : Document Type Definition Défini la structure d un document Document valide Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 2 / 44
Plan 1 Rappels 2 Affichage du XML Affichage arborescent Utilisation des CSS 3 Créer et manipuler du XML en PHP SimpleXML DomDocument Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 3 / 44
Plan 1 Rappels 2 Affichage du XML Affichage arborescent Utilisation des CSS 3 Créer et manipuler du XML en PHP SimpleXML DomDocument Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 4 / 44
Plan 1 Rappels 2 Affichage du XML Affichage arborescent Utilisation des CSS 3 Créer et manipuler du XML en PHP SimpleXML DomDocument Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 5 / 44
XML et affichage Affichage en ligne xml chargé dans le navigateur Application de style utilisation des CSS définition de la hiérarchie des éléments Transformation automatique mise en place d un langage évolué de transformation utilisable sur le client et sur le serveur Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 6 / 44
Plan 1 Rappels 2 Affichage du XML Affichage arborescent Utilisation des CSS 3 Créer et manipuler du XML en PHP SimpleXML DomDocument Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 7 / 44
XML dans le navigateur Affichage d un document XML vérification de la structure par le navigateur vérification de l en-tête du document vérification de la structure du document affichage uniquement sans erreur affichage déployable de "l arbre" Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 8 / 44
XML dans le navigateur <?xml version= " 1.0 " encoding= "UTF 8" standalone= " yes "?> <carnet> <personne> <nom>renard< / nom> <prenom>arnaud< / prenom> <adresse>dans son bureau< / adresse> < / personne> <personne> <nom>steffenel< /nom> <prenom>luiz Angelo< / prenom> <adresse>chez l u i < / adresse> < / personne> < / carnet> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 9 / 44
XML dans le navigateur : une erreur <?xml version= " 1.0 " encoding= "UTF 8" standalone= " yes "?> <carnet> <personne> <nom>renard< / nom> <prenom>arnaud< / prenom> <adresse>dans son bureau< / adresse> < / personne> <personne> <nom>steffenel< /nom> <prenom>luiz Angelo< / prenom> <adresse>chez l u i < / adresse> < / personne> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 10 / 44
Plan 1 Rappels 2 Affichage du XML Affichage arborescent Utilisation des CSS 3 Créer et manipuler du XML en PHP SimpleXML DomDocument Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 11 / 44
Rappel sur les CSS Objectif assurer la définition de la mise en forme permettre la séparation du contenu et de la mise en forme Mise en oeuvre définition dans une zone du fichier HTML définition dans un fichier externe et inclusion : < l i n k r e l =" s t y l e s h e e t " type =" t e x t / css " h r e f =" f e u i l l e _ d e _ s t y l e. css " / > Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 12 / 44
Principe des CSS Définition association propriété, valeur p r o p r i é t é : v a l e u r ; applicable à tout un type de balise une hiérarchie de balise définition de classes de styles p { } t e x t a l i g n : center ; c o l o r : t e a l ; Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 13 / 44
Fichier XML carnet.xml <?xml version=" 1.0 " encoding= "UTF 8"?> <?xml s t y l e s h e e t href= " carnet. css " type= " t e x t / css "?> <carnet> <personne> <nom>renard< / nom> <prenom>arnaud< / prenom> <adresse>dans son bureau< / adresse> < / personne> <personne> <nom> S t e f f e n e l < /nom> <prenom>luiz Angelo< / prenom> <adresse>chez < / personne> < / carnet> l u i < / adresse> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 14 / 44
Définition du CSS carnet.css carnet { background :#58 ae32 ; padding :10 px 0px ; border l e f t :50 px #93d14e s o l i d ; } personne { d i s p l a y : block ; border :1 px #666666 s o l i d ; background :# f f f f f f ; padding :1 px ; width :200 px ; margin :20 px auto ; } nom { d i s p l a y : block ; background c o l o r :#666666; padding :0 10px ; font weight : bold ; c o l o r :# dddddd ; t e x t transform : uppercase ; } prenom { d i s p l a y : block ; padding :0 10px ; } adresse { d i s p l a y : block ; c o l o r : blue ; padding :0 10px ; font s t y l e : i t a l i c } Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 15 / 44
Résultat Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 16 / 44
Définition du CSS carnet.css carnet { border top :20 px s o l i d #cc0404 ; font f a m i l y : a r i a l ; } personne { d i s p l a y : block ; border bottom :20 px s o l i d #cc0404 ; } nom { padding :0 10px ; } prenom { } adresse { d i s p l a y : block ; padding :2 px 35px ; background :#257301 u r l ( ask. png ) no repeat ; c o l o r :# f f f f f f ; } Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 17 / 44
Résultat Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 18 / 44
XML + CSS Apport Limites mise en forme des documents XML simple et intégrable pas de génération intermédiaire CSS n est pas un langage de programmation pas d itération, conditionnelles pas de traitement (tri) limité à la visualisation sur le client géré par le client uniquement : risque d incompatibilité pas de génération de HTML à suivre : XSLT (Extensible Stylesheet Language Transformation) Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 19 / 44
Plan 1 Rappels 2 Affichage du XML Affichage arborescent Utilisation des CSS 3 Créer et manipuler du XML en PHP SimpleXML DomDocument Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 20 / 44
Utiliser XML en PHP Solution codage manuel des opérations gestion des chaînes de caractères, expressions régulières... utilisation de structure élémentaires de gestion XML utilisation directe d une bibliothèque de bas niveau libxml recommandation du W3C qui décrit DOM-XML (interface indépendante de tout langage) utilisation d une bibliothèque spécifique : XMLReader / XMLWriter (php4) SimpleXML (php5) Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 21 / 44
Plan 1 Rappels 2 Affichage du XML Affichage arborescent Utilisation des CSS 3 Créer et manipuler du XML en PHP SimpleXML DomDocument Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 22 / 44
SimpleXML Caractéristiques opérations de base XML permet la création, manipulation de documents XML bibliothèque objet (SimpleXMLElement) fournie en standard dans PHP (depuis php5) Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 23 / 44
Utilisation Programmation objet création d un objet SimpleXML vide à partir d une chaîne de caractères item à partir d un fichier local ou distant (uri) manipulation à l aide des méthodes manipulation des noeuds XML manipulation des attributs retour sauvegarde dans un fichier texte affichage en ligne Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 24 / 44
Construction d un objet SimpleXMLElement A partir d une chaîne <?php $chaine = <<<XML <?xml version= 1.0?> <personne > <nom> S t e f f e n e l </nom> <prenom> Luiz Angelo </ prenom> <adresse >chez l u i </ adresse > </ personne > XML; $xml = new SimpleXMLElement ( $chaine, NULL, false ) ; / / ou $xml = simplexml_load_string ( $chaine ) ;?> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 25 / 44
Construction d un objet SimpleXMLElement A partir d un URI <?php $ u r i = h t t p : / / example. org / document. xml ; $xml = new SimpleXMLElement ( $ u r i, NULL, true ) ; / / ou $xml = new s i m p l e x m l _ l o a d _ f i l e ( $ u r i ) ;?> A partir d un fichier <?php $xml = new SimpleXMLElement (. / document. xml,null, true ) ; / / ou $xml = new s i m p l e x m l _ l o a d _ f i l e (. / document. xml ) ;?> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 26 / 44
Création et ajout de SimpleXMLElements <?php $xml = new SimpleXMLElement ( " <carnet > </ carnet > " ) ; $personne = $xml >addchild ( " personne " ) ; $personne >addchild ( "nom", " Renard " ) ; $personne >addchild ( " prenom ", " Arnaud " ) ; $personne >addchild ( " adresse ", " dans son bureau " ) ; $personne = $xml >addchild ( " personne " ) ; $personne >addchild ( "nom", " S t e f f e n e l " ) ; $personne >addchild ( " prenom ", " Luiz Angelo " ) ; $personne >addchild ( " adresse ", " chez l u i " ) ; echo " <pre > " ; echo $xml >asxml ( ) ; echo " </ pre > " ;?> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 27 / 44
Affichage d un SimpleXMLElement <?xml version= " 1.0 "?> <carnet> <personne> <nom>renard< / nom> <prenom>arnaud< / prenom> <adresse>dans son bureau< / adresse> < / personne> <personne> <nom> S t e f f e n e l < /nom> <prenom>luiz Angelo< / prenom> <adresse>chez < / personne> < / carnet> l u i < / adresse> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 28 / 44
Affichage d un SimpleXMLElement avec print_r SimpleXMLElement Object ( [ personne ] => Array ( [ 0 ] => SimpleXMLElement Object ( [ nom] => Renard [ prenom ] => Arnaud [ adresse ] => dans son bureau ) [ 1 ] => SimpleXMLElement Object ( [nom] => S t e f f e n e l [ prenom ] => Luiz Angelo [ adresse ] => chez l u i ) ) ) Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 29 / 44
Document mal formé <?php $chaine = <<<XML <?xml version= 1.0?> <personne > <nom> S t e f f e n e l </nom> <prenom>luiz Angelo </ prenom> <adresse >chez l u i </ personne > XML; t r y { $xml = @new SimpleXMLElement ( $chaine ) ; } catch ( Exception $e ) { p r i n t _ r ( $e ) ; die ( " Erreur dans l a chaine xml " ) ; }?> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 30 / 44
Document mal formé : affichage Exception Object ( [ message:protected ] => S t r i n g could not be parsed as XML [ s t r i n g : E x c e p t i o n : p r i v a t e ] => [ code: protected ] => 0 [ f i l e : p r o t e c t e d ] => C: \wamp\www\ simplexml \ xml. php [ l i n e : p r o t e c t e d ] => 29 [ t r a c e : E x c e p t i o n : p r i v a t e ] => Array ( [ 0 ] => Array ( [ f i l e ] => C: \wamp\www\ simplexml \ xml. php [ l i n e ] => 29 [ f u n c t i o n ] => construct [ class ] => SimpleXMLElement [ type ] => > [ args ] => Array ( [ 0 ] => <?xml version= 1.0?> <personne> <nom> S t e f f e n e l < / nom> <prenom>luiz Angelo< / prenom> <adresse>chez l u i < / personne> ) ) ) [ p r e v i o u s : E x c e p t i o n : p r i v a t e ] => ) Erreur dans l a chaine xml Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 31 / 44
Parcourir un document Référence <?xml version= " 1.0 "?> <carnet date= 02/02/2010 > <personne> <nom>renard< / nom> <prenom>arnaud< / prenom> <adresse type= t r a v a i l s u p e r f i c i e = 2 >dans son bureau < / adresse> < / personne> <personne> <nom> S t e f f e n e l < /nom> <prenom>luiz Angelo< / prenom> <adresse type= maison s u p e r f i c i e = 400 >chez l u i < / adresse> < / personne> < / carnet> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 32 / 44
Parcourir un document : nom d un élément Code PHP echo $xml >getname ( ) ; Affichage carnet Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 33 / 44
Parcourir un document Code PHP echo $xml >personne [0] >nom. " \ n " ; echo $xml >personne [1] >nom. " \ n " ; Affichage Renard Steffenel Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 34 / 44
Parcourir un document Code PHP foreach ( $xml as $a => $b ) echo " $a=> ". $b >nom. " \ n " ; Affichage Renard Steffenel Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 35 / 44
Parcourir un document Code PHP foreach ( $xml >c h i l d r e n ( ) as $a => $b ) echo " $a=> ". $b >nom. " \ n " ; Affichage personne=>renard personne=>steffenel Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 36 / 44
Parcourir un document : les attribut Code PHP echo $xml [ " date " ] ; echo $xml >personne [1] > adresse [ " type " ] ; Affichage 02/02/2010 maison Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 37 / 44
Parcourir un document : liste des attribut Code PHP foreach ( $xml >personne [0] >adresse > a t t r i b u t e s ( ) as $a => $b ) echo " $a => $b \ n " ; Affichage type=>travail superficie=>2 Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 38 / 44
Parcourir un document : suppression d élément et d attribut Code PHP unset ( $xml >personne [ 0 ] ) ; unset ( $xml [ " date " ] ) ; unset ( $xml >personne [0] > adresse ) ; Résultat <?xml version= " 1.0 "?> <carnet> <personne> <nom> S t e f f e n e l < /nom> <prenom>luiz Angelo< / prenom> < / personne> < / carnet> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 39 / 44
Récapitulatif SimpleXML SimpleXMLElement - La classe SimpleXMLElement SimpleXMLElement::addAttribute - Ajoute un attribut à l élément SimpleXML SimpleXMLElement::addChild - Ajoute un élément enfant au noeud XML SimpleXMLElement::asXML - Retourne une chaîne XML basée sur un élément SimpleXML SimpleXMLElement::attributes - Identifie les attributs d un élément SimpleXMLElement::children - Cherche les fils d un noeud donné SimpleXMLElement:: construct - Crée un nouvel objet SimpleXMLElement SimpleXMLElement::getDocNamespaces - Retourne les espaces de noms déclarés dans un document SimpleXMLElement::getName - Récupère le nom d un élément XML SimpleXMLElement::getNamespaces - Retourne les espaces de noms utilisés dans un document SimpleXMLElement::registerXPathNamespace - Crée un contexte préfixe/ns pour la prochaine requête XPath SimpleXMLElement::xpath - Exécute une requête Xpath sur des données XML Fonctions SimpleXML simplexml_import_dom - Construit un objet SimpleXMLElement à partir d un objet DOM simplexml_load_file - Convertit un fichier XML en objet simplexml_load_string - Convertit une chaîne XML en objet Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 40 / 44
SimpleXML : XPath Code PHP $xml = new SimpleXMLElement ( $ s t r i n g ) ; $ r e s u l t = $xml >xpath ( " / / adresse [ {@} type ] " ) ; foreach ( $ r e s u l t as $node ) echo $node. " \ n " ; Affichage dans son bureau chez lui Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 41 / 44
Plan 1 Rappels 2 Affichage du XML Affichage arborescent Utilisation des CSS 3 Créer et manipuler du XML en PHP SimpleXML DomDocument Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 42 / 44
Extention DOM : Validation DTD L extension DOM est le remplacement de l extension DOM XML en php4 et permet de manipuler des documents XML avec l API DOM. Code PHP <?php $ x m l f i l e = " f i c h i e r. xml " ; / / create the DOMDocument o b j e c t $xdoc = new DomDocument ; / / Load the xml document i n the DOMDocument o b j e c t $xdoc >Load ( $ x m l f i l e ) ; / / V a l i d a t e the XML f i l e against the DTD i f ( $xdoc >v a l i d a t e ( ) ) echo " $ x m l f i l e est v a l i d e selon sa DTD. " ; else echo " $ x m l f i l e est i n v a l i d e selon sa DTD. " ;?> Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 43 / 44
Extention DOM : Validation XML-Schema Á l instar de DTD, XML-Schema permet de décrire la structure d un document XML. Code PHP <?php $ x m l f i l e = " f i c h i e r. xml " ; $xmlschema = " f i c h i e r. xsd " ; / / create the DOMDocument o b j e c t $xdoc = new DomDocument ; / / Load the xml document i n the DOMDocument o b j e c t $xdoc >Load ( $ x m l f i l e ) ; / / V a l i d a t e the XML f i l e against the XML Schema i f ( $xdoc >schemavalidate ( $xmlschema ) ) echo " $ x m l f i l e est v a l i d e selon $xmlschema. \ n " ; else echo " $ x m l f i l e est i n v a l i d e selon $xmlschema. \ n " ;? > Arnaud Renard (URCA) INFO0406 arnaud.renard@univ-reims.fr 44 / 44