Jean-Marie Renouard LightPath 2014©
Le logo PHP est du domaine public http://commons.wikimedia.org/wiki/File:PHP-logo.svg Ce document est licencié sous licence ◦Attribution-NonCommercial-ShareAlike ◦CC BY-NC-SA Plus de détails: http://creativecommons.org/licenses/by-nc-sa/3.0/fr/ LightPath 2014© - http://www.jmrenouard.fr 2
DOM: chargement et écriture DOM: validation XML /DTD DOM: validation XML schéma DOM: conversion en tableau DOM: recherche d’élément DOM: recherche XPATH SimpleXML: chargement et écriture SimpleXML : recherche d’élément LightPath 2014© - http://www.jmrenouard.fr 3
LightPath 2014© - http://www.jmrenouard.fr 4
DOM: Lecture et création d’un arbre syntaxique. Pas de lecture de flux Tout est lu puis analysé Facilite la manipulation Lent quand le fichier XML est important Consommation mémoire importante LightPath 2014© - http://www.jmrenouard.fr 5
Fichier XML exemple: ◦http://www.w3schools.com/XML/simple.xml Classe PHP: DOMDocument ◦http://php.net/manual/fr/class.domdocument.php Méthode load: ◦URL: http://.../.xml ◦Fichier Méthode loadXML et loadHTML: ◦Chaîne de caractère LightPath 2014© - http://www.jmrenouard.fr 6
<?php $dom = new DOMDocument(); $dom- >load('http://www.w3schools.com/XML/simple.xml'); $dom->load(‘/c/simple.xml'); $dom->getElementsByTagName(‘food'); $i++; foreach ($params as $param) { echo « * « .$param->nodeName. » = « .$param- >nodeValue; } ?> LightPath 2014© - http://www.jmrenouard.fr 7
<?php $dom = new DOMDocument(); $dom- >load('http://www.w3schools.com/XML/simple.xml'); //$dom->load(‘/c/simple.xml'); $params=$dom->getElementsByTagName(‘food'); foreach ($params as $param) { echo « * « .$param->nodeName. » = « .$param- >nodeValue; } ?> LightPath 2014© - http://www.jmrenouard.fr 8
Méthode: save() ◦Fichier à sauvegarder Méthodes: saveHTML() et saveXML() ◦Sauvegarde dans une chaîne de caractère LightPath 2014© - http://www.jmrenouard.fr 9
Validation du format XML Si DTD => Validation par DTD Méthode de DOMDocument ◦Validate() <?php $dom = new DOMDocument; $dom->Load('book.xml'); if ($dom->validate()) { echo "Ce document est valide !n"; } ?> LightPath 2014© - http://www.jmrenouard.fr 10
Définition en XML d'un contrat que doit respecter un document XML. Validation formelle de la structure Validation du format des données LightPath 2014© - http://www.jmrenouard.fr 11
Méthode de DOMDocument: schemaValidate() <?php $dom = new DOMDocument; $dom->Load('book.xml'); if ($dom- >schemaValidate(‘schema.xml’)) { echo "Ce document est valide XMLSchema !n"; } ?> LightPath 2014© - http://www.jmrenouard.fr 12
ll est possible de traduire une document XML en tableau PHP Facilite la lecture et la manipulation. Exemple: WC1/MyDOMDocument.php LightPath 2014© - http://www.jmrenouard.fr 13
DOMDocument :2 méthodes getElementById(): Trouve un élément par identifiant. ◦Renvoie un DOMElement getElementsByTagName(): Trouve une liste de noeud ◦Renvoie une DOMNodeList LightPath 2014© - http://www.jmrenouard.fr 14
Il s’agit d’un tag: DOMElement $domElement=new DOMElement(« food »); $domElement->tagName; $domElement->getAttribute(); $domElement->getElementsByTagName(‘..’); LightPath 2014© - http://www.jmrenouard.fr 15
$nodeList->length; DOMNode $node=$nodeList->item($i); $node->nodeName: nom du noeud $node->nodeValue: valeur du noeud $node->textContent: contenu du noeud LightPath 2014© - http://www.jmrenouard.fr 16
Moyen d'effectuer de la recherche dans des documents XML. Syntaxe riche Efficace et standardisé LightPath 2014© - http://www.jmrenouard.fr 17
Classe DOMXPath: 2 méthodes: ◦evaluate() : évaluation et comptage ◦query(): recherche des éléments LightPath 2014© - http://www.jmrenouard.fr 18
<?php $doc = new DOMDocument; $doc->load('book.xml'); $xpath = new DOMXPath($doc); $tbody = $doc- >getElementsByTagName('tbody')- >item(0); // notre requête est relative au noeud tbody $query = 'count(row/entry[. = "en"])'; $entries = $xpath- >evaluate($query, $tbody); echo "Il y a $entries livres anglaisn"; ?> LightPath 2014© - http://www.jmrenouard.fr 19
DOMXPtah->query renvoie un objet DOMNodeList <?php $doc = new DOMDocument; $doc->load('book.xml'); $xpath = new DOMXPath($doc); $query = '//book/title'; $entries = $xpath->query($query); foreach ($entries as $entry) { echo "Livre trouvé {$entry->nodeValue} n"; } ?> LightPath 2014© - http://www.jmrenouard.fr 20
LightPath 2014© - http://www.jmrenouard.fr 21
Plus simple que DOM Utilise la librairie libXML Plus rapide, plus simple LibXML: librairie XML de référence LightPath 2014© - http://www.jmrenouard.fr 22
simplexml_import_dom : ◦Conversion d’un DOMDocument en SimpleXMLElement simple_load_file: ◦Conversion un fichier XML en objet simplexml_load_string ◦Conversion d’une chaîne XML en objet LightPath 2014© - http://www.jmrenouard.fr 23
L’objet SimpleXMLElement ◦Méthode asXML($nomDeFichier) Extraction d’une chaîne de caractère XML file_put_contents pour écrire dans un fichier. LightPath 2014© - http://www.jmrenouard.fr 24
Expression XPath possible. Façon la plus rapide <?php $xml= simple_load_file(‘book.xml’); $result = $xml->xpath('/book/title'); while(list( , $node) = each($result)) { echo $node->asXML(); } ?> LightPath 2014© - http://www.jmrenouard.fr 25
nom : recherche de la balise nom /fils : recherche fils directs //noeud : recherche fils directs et indirects * : wildcard (//*) | : expression d’un Ou . : élément courant .. : élément parent @attr : recherche d’un élément avec attribut attr LightPath 2014© - http://www.jmrenouard.fr 26
@id=‘5’ : recherche d’un élément avec attribut id valant 5. Book[@id=‘5’] : recherche d’un élément book avec un attribut id valant 5 LightPath 2014© - http://www.jmrenouard.fr 27
LightPath: ◦Société de conseil et d’ingénierie ◦Formations, Conseil, Audit et mise en oeuvre ◦jmrenouard@lightpath.fr Jean-Marie RENOUARD ◦jmrenouard@gmail.com ◦Twitter: @jmrenouard ◦http://www.jmrenouard.fr LightPath 2014© - http://www.jmrenouard.fr 28

Fichier XML et PHP5

  • 1.
  • 2.
    Le logo PHPest du domaine public http://commons.wikimedia.org/wiki/File:PHP-logo.svg Ce document est licencié sous licence ◦Attribution-NonCommercial-ShareAlike ◦CC BY-NC-SA Plus de détails: http://creativecommons.org/licenses/by-nc-sa/3.0/fr/ LightPath 2014© - http://www.jmrenouard.fr 2
  • 3.
    DOM: chargement etécriture DOM: validation XML /DTD DOM: validation XML schéma DOM: conversion en tableau DOM: recherche d’élément DOM: recherche XPATH SimpleXML: chargement et écriture SimpleXML : recherche d’élément LightPath 2014© - http://www.jmrenouard.fr 3
  • 4.
    LightPath 2014© -http://www.jmrenouard.fr 4
  • 5.
    DOM: Lecture etcréation d’un arbre syntaxique. Pas de lecture de flux Tout est lu puis analysé Facilite la manipulation Lent quand le fichier XML est important Consommation mémoire importante LightPath 2014© - http://www.jmrenouard.fr 5
  • 6.
    Fichier XML exemple: ◦http://www.w3schools.com/XML/simple.xml Classe PHP: DOMDocument ◦http://php.net/manual/fr/class.domdocument.php Méthode load: ◦URL: http://.../.xml ◦Fichier Méthode loadXML et loadHTML: ◦Chaîne de caractère LightPath 2014© - http://www.jmrenouard.fr 6
  • 7.
    <?php $dom =new DOMDocument(); $dom- >load('http://www.w3schools.com/XML/simple.xml'); $dom->load(‘/c/simple.xml'); $dom->getElementsByTagName(‘food'); $i++; foreach ($params as $param) { echo « * « .$param->nodeName. » = « .$param- >nodeValue; } ?> LightPath 2014© - http://www.jmrenouard.fr 7
  • 8.
    <?php $dom =new DOMDocument(); $dom- >load('http://www.w3schools.com/XML/simple.xml'); //$dom->load(‘/c/simple.xml'); $params=$dom->getElementsByTagName(‘food'); foreach ($params as $param) { echo « * « .$param->nodeName. » = « .$param- >nodeValue; } ?> LightPath 2014© - http://www.jmrenouard.fr 8
  • 9.
    Méthode: save() ◦Fichierà sauvegarder Méthodes: saveHTML() et saveXML() ◦Sauvegarde dans une chaîne de caractère LightPath 2014© - http://www.jmrenouard.fr 9
  • 10.
    Validation du formatXML Si DTD => Validation par DTD Méthode de DOMDocument ◦Validate() <?php $dom = new DOMDocument; $dom->Load('book.xml'); if ($dom->validate()) { echo "Ce document est valide !n"; } ?> LightPath 2014© - http://www.jmrenouard.fr 10
  • 11.
    Définition en XMLd'un contrat que doit respecter un document XML. Validation formelle de la structure Validation du format des données LightPath 2014© - http://www.jmrenouard.fr 11
  • 12.
    Méthode de DOMDocument:schemaValidate() <?php $dom = new DOMDocument; $dom->Load('book.xml'); if ($dom- >schemaValidate(‘schema.xml’)) { echo "Ce document est valide XMLSchema !n"; } ?> LightPath 2014© - http://www.jmrenouard.fr 12
  • 13.
    ll est possiblede traduire une document XML en tableau PHP Facilite la lecture et la manipulation. Exemple: WC1/MyDOMDocument.php LightPath 2014© - http://www.jmrenouard.fr 13
  • 14.
    DOMDocument :2 méthodes getElementById(): Trouve un élément par identifiant. ◦Renvoie un DOMElement getElementsByTagName(): Trouve une liste de noeud ◦Renvoie une DOMNodeList LightPath 2014© - http://www.jmrenouard.fr 14
  • 15.
    Il s’agit d’untag: DOMElement $domElement=new DOMElement(« food »); $domElement->tagName; $domElement->getAttribute(); $domElement->getElementsByTagName(‘..’); LightPath 2014© - http://www.jmrenouard.fr 15
  • 16.
    $nodeList->length; DOMNode $node=$nodeList->item($i); $node->nodeName: nom du noeud $node->nodeValue: valeur du noeud $node->textContent: contenu du noeud LightPath 2014© - http://www.jmrenouard.fr 16
  • 17.
    Moyen d'effectuer dela recherche dans des documents XML. Syntaxe riche Efficace et standardisé LightPath 2014© - http://www.jmrenouard.fr 17
  • 18.
    Classe DOMXPath: 2méthodes: ◦evaluate() : évaluation et comptage ◦query(): recherche des éléments LightPath 2014© - http://www.jmrenouard.fr 18
  • 19.
    <?php $doc =new DOMDocument; $doc->load('book.xml'); $xpath = new DOMXPath($doc); $tbody = $doc- >getElementsByTagName('tbody')- >item(0); // notre requête est relative au noeud tbody $query = 'count(row/entry[. = "en"])'; $entries = $xpath- >evaluate($query, $tbody); echo "Il y a $entries livres anglaisn"; ?> LightPath 2014© - http://www.jmrenouard.fr 19
  • 20.
    DOMXPtah->query renvoie unobjet DOMNodeList <?php $doc = new DOMDocument; $doc->load('book.xml'); $xpath = new DOMXPath($doc); $query = '//book/title'; $entries = $xpath->query($query); foreach ($entries as $entry) { echo "Livre trouvé {$entry->nodeValue} n"; } ?> LightPath 2014© - http://www.jmrenouard.fr 20
  • 21.
    LightPath 2014© -http://www.jmrenouard.fr 21
  • 22.
    Plus simple queDOM Utilise la librairie libXML Plus rapide, plus simple LibXML: librairie XML de référence LightPath 2014© - http://www.jmrenouard.fr 22
  • 23.
    simplexml_import_dom : ◦Conversiond’un DOMDocument en SimpleXMLElement simple_load_file: ◦Conversion un fichier XML en objet simplexml_load_string ◦Conversion d’une chaîne XML en objet LightPath 2014© - http://www.jmrenouard.fr 23
  • 24.
    L’objet SimpleXMLElement ◦MéthodeasXML($nomDeFichier) Extraction d’une chaîne de caractère XML file_put_contents pour écrire dans un fichier. LightPath 2014© - http://www.jmrenouard.fr 24
  • 25.
    Expression XPath possible. Façon la plus rapide <?php $xml= simple_load_file(‘book.xml’); $result = $xml->xpath('/book/title'); while(list( , $node) = each($result)) { echo $node->asXML(); } ?> LightPath 2014© - http://www.jmrenouard.fr 25
  • 26.
    nom : recherchede la balise nom /fils : recherche fils directs //noeud : recherche fils directs et indirects * : wildcard (//*) | : expression d’un Ou . : élément courant .. : élément parent @attr : recherche d’un élément avec attribut attr LightPath 2014© - http://www.jmrenouard.fr 26
  • 27.
    @id=‘5’ : recherched’un élément avec attribut id valant 5. Book[@id=‘5’] : recherche d’un élément book avec un attribut id valant 5 LightPath 2014© - http://www.jmrenouard.fr 27
  • 28.
    LightPath: ◦Société deconseil et d’ingénierie ◦Formations, Conseil, Audit et mise en oeuvre ◦jmrenouard@lightpath.fr Jean-Marie RENOUARD ◦jmrenouard@gmail.com ◦Twitter: @jmrenouard ◦http://www.jmrenouard.fr LightPath 2014© - http://www.jmrenouard.fr 28