1.2 PHP et XML - Free
1.3.3 Créer un fichier XML de base (Méthode dynamique) ... à HTML qui décrit du
contenu et de la présentation (<br />, <td>valeur</td>). ...... Ecrivez un script PHP
qui ajoute le contenu de la table villesNouvelles à villes.xml. Corrigé. <?php.
part of the document
PHP
et
XML
TABLE DES MATIERES
TOC \o "1-3" \h \z HYPERLINK \l "_Toc248760507" Chapitre 1 PHP ET XML PAGEREF _Toc248760507 \h 3
HYPERLINK \l "_Toc248760508" 1.1 XML en 3 mots PAGEREF _Toc248760508 \h 3
HYPERLINK \l "_Toc248760509" 1.1.1 Définition PAGEREF _Toc248760509 \h 3
HYPERLINK \l "_Toc248760510" 1.1.2 La structure d'un document XML PAGEREF _Toc248760510 \h 4
HYPERLINK \l "_Toc248760511" 1.1.3 Les parseurs (Analyseurs) PAGEREF _Toc248760511 \h 5
HYPERLINK \l "_Toc248760512" 1.1.4 Les processeurs XSL PAGEREF _Toc248760512 \h 6
HYPERLINK \l "_Toc248760513" 1.1.5 Trois documents xml de types différents PAGEREF _Toc248760513 \h 7
HYPERLINK \l "_Toc248760514" 1.2 PHP et XML PAGEREF _Toc248760514 \h 9
HYPERLINK \l "_Toc248760515" 1.3 Création d'un fichier XML à partir d'une table PAGEREF _Toc248760515 \h 10
HYPERLINK \l "_Toc248760516" 1.3.1 Objectif PAGEREF _Toc248760516 \h 10
HYPERLINK \l "_Toc248760517" 1.3.2 Créer un fichier XML de base (Méthode statique) PAGEREF _Toc248760517 \h 11
HYPERLINK \l "_Toc248760518" 1.3.3 Créer un fichier XML de base (Méthode dynamique) PAGEREF _Toc248760518 \h 12
HYPERLINK \l "_Toc248760519" 1.4 L'analyse événementielle (SAX) PAGEREF _Toc248760519 \h 14
HYPERLINK \l "_Toc248760520" 1.4.1 Généralités PAGEREF _Toc248760520 \h 14
HYPERLINK \l "_Toc248760521" 1.4.2 Repérer les balises PAGEREF _Toc248760521 \h 15
HYPERLINK \l "_Toc248760522" 1.4.3 Récupérer les attributs des balises PAGEREF _Toc248760522 \h 17
HYPERLINK \l "_Toc248760523" 1.4.4 Récupérer les textes des éléments PAGEREF _Toc248760523 \h 19
HYPERLINK \l "_Toc248760524" 1.4.5 Exercice : Récupérer les valeurs des attributs et des balises PAGEREF _Toc248760524 \h 21
HYPERLINK \l "_Toc248760525" 1.4.6 Afficher des images, des URL
à partir des valeurs des éléments. PAGEREF _Toc248760525 \h 24
HYPERLINK \l "_Toc248760526" 1.4.7 Afficher des images, des URL
à partir des attributs des éléments. PAGEREF _Toc248760526 \h 26
HYPERLINK \l "_Toc248760527" 1.4.8 xml_parse_into_struct PAGEREF _Toc248760527 \h 27
HYPERLINK \l "_Toc248760528" 1.5 L'analyse globale : DOM PAGEREF _Toc248760528 \h 29
HYPERLINK \l "_Toc248760529" 1.5.1 Présentation PAGEREF _Toc248760529 \h 29
HYPERLINK \l "_Toc248760530" 1.5.2 L'affichage brut d'un fichier XML : saveXml() PAGEREF _Toc248760530 \h 30
HYPERLINK \l "_Toc248760531" 1.5.3 L'affichage des valeurs des balises : textContent PAGEREF _Toc248760531 \h 31
HYPERLINK \l "_Toc248760532" 1.5.4 L'affichage une à une des valeurs des balises PAGEREF _Toc248760532 \h 32
HYPERLINK \l "_Toc248760533" 1.5.5 L'affichage sous condition PAGEREF _Toc248760533 \h 35
HYPERLINK \l "_Toc248760534" 1.5.6 Ajouter un élément avec DOM : createElement() et appendChild() PAGEREF _Toc248760534 \h 36
HYPERLINK \l "_Toc248760535" 1.5.7 Création ex-nihilo d'un fichier XML PAGEREF _Toc248760535 \h 39
HYPERLINK \l "_Toc248760536" 1.5.8 Rechercher un élément : xPath->query() PAGEREF _Toc248760536 \h 41
HYPERLINK \l "_Toc248760537" 1.5.9 Rechercher N éléments : starts-with PAGEREF _Toc248760537 \h 43
HYPERLINK \l "_Toc248760538" 1.5.10 Autres opérateurs XPATH PAGEREF _Toc248760538 \h 44
HYPERLINK \l "_Toc248760539" 1.5.11 Calculer avec XPath->evaluate() PAGEREF _Toc248760539 \h 45
HYPERLINK \l "_Toc248760540" 1.5.12 Supprimer un élément : removeChild() PAGEREF _Toc248760540 \h 46
HYPERLINK \l "_Toc248760541" 1.5.13 Modifier un élément : replaceChild() PAGEREF _Toc248760541 \h 47
HYPERLINK \l "_Toc248760542" 1.5.14 Visualiser les valeurs des attributs des balises : attributes PAGEREF _Toc248760542 \h 49
HYPERLINK \l "_Toc248760543" 1.5.15 Ajouter un élément avec des attributs avec DOM PAGEREF _Toc248760543 \h 51
HYPERLINK \l "_Toc248760544" 1.5.16 Modifier la valeur d'un attribut avec DOM PAGEREF _Toc248760544 \h 52
HYPERLINK \l "_Toc248760545" 1.5.17 Exercice DOM récapitulatif PAGEREF _Toc248760545 \h 53
HYPERLINK \l "_Toc248760546" 1.6 PHP et XSL(T) PAGEREF _Toc248760546 \h 54
HYPERLINK \l "_Toc248760547" 1.6.1 Présentation de XSL(T) PAGEREF _Toc248760547 \h 54
HYPERLINK \l "_Toc248760548" 1.6.2 PHP et XSL(T) PAGEREF _Toc248760548 \h 58
HYPERLINK \l "_Toc248760549" 1.7 Annexes et Exercices PAGEREF _Toc248760549 \h 60
HYPERLINK \l "_Toc248760550" 1.7.1 XML CRUD PAGEREF _Toc248760550 \h 61
HYPERLINK \l "_Toc248760551" 1.7.2 XML vers BD avec DOM (2 éléments). PAGEREF _Toc248760551 \h 64
HYPERLINK \l "_Toc248760552" 1.7.3 XML vers BD avec DOM (4 éléments). PAGEREF _Toc248760552 \h 65
HYPERLINK \l "_Toc248760553" 1.7.4 XML vers BD avec DOM. Le problème des commentaires. PAGEREF _Toc248760553 \h 67
HYPERLINK \l "_Toc248760554" 1.7.5 XML vers BD avec DOM en dynamique. PAGEREF _Toc248760554 \h 69
HYPERLINK \l "_Toc248760555" 1.7.6 XML vers BD avec SAX. PAGEREF _Toc248760555 \h 72
HYPERLINK \l "_Toc248760556" 1.7.7 XSLT dynamique PAGEREF _Toc248760556 \h 74
HYPERLINK \l "_Toc248760557" 1.7.8 BD vers XML avec DOM PAGEREF _Toc248760557 \h 75
HYPERLINK \l "_Toc248760558" 1.7.9 XML vers BD avec lecture de la DTD PAGEREF _Toc248760558 \h 82
HYPERLINK \l "_Toc248760559" 1.7.10 XML vers BD avec lecture du Schema PAGEREF _Toc248760559 \h 85
HYPERLINK \l "_Toc248760560" 1.7.11 Une classe DAO_XML PAGEREF _Toc248760560 \h 86
HYPERLINK \l "_Toc248760561" 1.7.12 PHP, XML et RSS PAGEREF _Toc248760561 \h 86
HYPERLINK \l "_Toc248760562" 1.7.13 PHP, XML et WebServices PAGEREF _Toc248760562 \h 86
PHP ET XML
XML en 3 mots
Définition
XML (eXtensible Markup Language) est un Langage à balises extensible contrairement à HTML qui est un langage défini avec un nombre de balises limité. HTML est basé sur un lexique (la liste des éléments) et une grammaire (XHTML renforce sa grammaire).
Un document XML est dit conforme s'il correspond à la norme XML (Ecrit en minuscules, les éléments sont fermés, même les éléments vides,
).
XML décrit n'importe quel domaine de données grâce à son extensibilité. Il permet de structurer un domaine, de définir le vocabulaire et la syntaxe des données contenus dans une DTD (Document Type Definition) ou un schéma permettant de vérifier la validité du document XML.
Les balises XML ne décrivent que du contenu contrairement à HTML qui décrit du contenu et de la présentation (, valeur).
XML permet de séparer le contenu de la présentation. Un même document sera affiché dans des applications ou des périphériques différents. La présentation est le plus souvent réalisée avec XSL (eXtensible Style Language), le langage des feuilles de style pour XML.
XML a été élaboré par le XML Working Group sous l'égide du W3C en 1996.
La norme XML est consultable sur le site du W3C, http://www.w3.org/XML/.
XML est un sous ensemble de SGML (Standard Generalized Markup Language), défini par le standard ISO8879 en 1986.
La structure d'un document XML
Un document XML est formé de :
Instructions de traitement ou prologue : qui précise l'encodage et éventuellement la feuille de style XSL.
Eventuellement d'une DTD (Définition de type de document) ou d'un schéma (Modèle de document pour la validation).
Un élément racine.
Un ensemble d'éléments.
Des attributs associés aux éléments.
Des noeuds Text ou des CDATA (Non analysés).
Des références à des entités (Structures).
Des commentaires.
Les parseurs (Analyseurs)
Un parseur est un outil qui permet d'analyser et de valider un document XML.
Un document bien formé est un document qui est conforme à la norme XML définie par le W3C.
C'est l'étape d'analyse qui contrôle la conformité.
Un document valide est un document XML grammaticalement correct. Il correspond à un vocabulaire et une grammaire associés au document.
La grammaire est exprimée sous forme d'un DTD (Document Type Definition) ou d'un schéma de données (XML Schema).
C'est l'étape de validation qui contrôle la validité du document.
SAX
Les parseurs SAX (Simple API For XML) analysent les documents selon une approche événementielle en invoquant l'application à chaque ouverture et chaque fermeture d'élément ou lors de l'analyse d'un noeud.
SAX est orienté flux et est adapté aux analyses séquentielles de documents. Les fonctions sexécutant séquentiellement, il faut travailler avec des globales.
DOM
Les parseurs DOM (Document Object Model) charge en mémoire le document dans son ensemble et construisent une représentation arborescente pour permettre à une application de le manipuler.
DOM est orienté document et doit être utilisé lorsqu'il s'agit de faire une analyse d'ensemble, une restructuration du document, des modifications.
DOM n'est pas adapté pour les gros documents (espace mémoire requis important).
Eléments de comparaison SAX et DOM
SAXDOMAccès aux élémentsSéquentiel/EvénementielDirectEmpreinte mémoireLégèreLourdeCRUDRCRUDFacilité d'écriture du scriptDifficileFacile
Les processeurs XSL
Un processeur XSL est un programme qui permet de transformer un document XML en un document utilisable par un client ou une application en fonction de nombreux critères. Cette technologie de transformation la différencie des feuilles de style CSS.
Trois documents xml de types différents
Format "Document"
villesDocument.xml
Les informations sont dans les nuds texte des éléments.
75012
Paris 12
75011
Paris 11
75002
Paris 2
75021
Paris 21
Format "données"
villesData.xml
Les informations sont dans les attributs des éléments.
Format "mixte"
bibliotheque_1.xml
Les informations stables sont dans les attributs des éléments et les informations instables sont dans nuds Texte des éléments.
Pocket
la_poursuite_du_bonheur.jpg
http://www.douglas-kennedy.com/
contact@douglaskennedy.com
Belfond
l_homme_qui_voulait_vivre_sa_vie.jpg
http://www.douglas-kennedy.com/
contact@douglaskennedy.com
Gallimard
la_sieste_assassinee.jpg
http://www.evene.fr/celebre/biographie/philippe-delerm-3273.php
contact@delerme.free.fr
SciencesPo Editions
lesinstitutionsdelaVeme.jpg
http://p.b.free.fr
p.b@free.fr
PHP et XML
Configuration
Pour travailler avec SAX aucune modification de la configuration n'est nécessaire.
Pour DOM en revanche il faut activer dans php.ini la dll : d'où extension=php_domxml.dll.
Pour SAX il n'y a pas de différence entre PHP4 et PHP5; en revanche pour DOM il y a des différences.
SAX est écrit en fonctionnel. SAX est adapté pour une lecture.
DOM est écrit en Objet. DOM est plus souple pour la mise à jour.
Objectifs de restitution
Créer un fichier XML à partir d'une table d'une BD.
Visualiser du XML Brut.
Visualiser de façon formatée du XML contenant du texte.
Visualiser de façon formatée du XML contenant du texte et des références à des images et des URL.
Graphiquement
Table BD
Fichier XMLAffichage BrutAffichage formaté simpleAffichage formaté avec Images et URL
Objectifs de mises à jour avec DOM
Création d'un élément.
Recherche d'un élément.
Suppression d'un élément.
Modification d'un élément.
Création d'un fichier XML à partir d'une table
Objectif
Créer un fichier XML basique à partir d'une table d'une BD (méthode statique).
Exemple : cours.villes ( villes.xml
Puis à partir de n'importe quelle table (méthode dynamique).
cours.table ( table.xml
Les deux méthodes vont lire les données dans la table et les transférer dans un fichier XML.
La deuxième méthode diffère dans la mesure où nous allons lire la structure de la table pour ensuite générer la structure du fichier XML (du moins les noms des éléments).
Créer un fichier XML de base (Méthode statique)
Principes et démarche
La table villes(cp, nom_ville)
CPnom_ville75012Paris 1275011Paris 1175002Paris 275021Paris 21
Cet exemple lit des données dans la table Villes de la BD et crée un fichier XML de base avec des éléments reprenant le nom de la table et les noms des colonnes. Ces noms sont connus.
Les données sont les valeurs des champs.
Il s'agit tout simplement de créer un fichier texte d'extension XML.
La première ligne étant le prologue latin :
Voici le fichier XML résultant :
75012Paris 12
75011Paris 11
75002Paris 2
75021Paris 21
Script