420-B63 Programmation Web Avancée Auteur : Frédéric Thériault PHP & XML
Fichier XML – test.xml <?xml version="1.0" encoding="UTF-8"?> <exemple> <test date="2009-02-01"> <nom>Rabbit</nom> </test> <test date="2009-03-01"> <nom>Valliant</nom> </exemple>
Méthode 1 - Simple XML Permet de charger le document en mémoire et en faire des opérations Lecture à partir d’une chaîne de caractères $xmlObject = simplexml_load_string($xml); ou encore $xml = new SimpleXMLElement($xmlstr); Lecture à partir d’un fichier XML $xmlObject = simplexml_load_file(‘test.xml’); $xml = new SimpleXMLElement(‘http://www.ab.com/test.xml’, NULL, true);
SimpleXML - Lecture <?php $xmlstr = …; // contient le XML en mémoire dans cette variable $xml = new SimpleXMLElement($xmlstr); /* Pour chaque test, on écrit le nom */ foreach ($xml->test as $test) { echo $test->nom; } ?>
SimpleXML - écriture $xml = new SimpleXMLElement($xmlstr); $nodePrenom = $xml->test[0]->addChild(‘prenom’, ‘Roger’); echo $xml->asXML(); Résultat: <?xml version="1.0" encoding="UTF-8"?> <exemple> <test date="2009-02-01"> <nom>Rabbit</nom> <prenom>Roger</prenom> </test> <test date="2009-03-01"> <nom>Valliant</nom> </exemple> Pour avoir la référence complète de SimpleXML, voir : http://ca.php.net/manual/en/simplexml.examples-basic.php
Méthode 2 - DOMDocument /*créer un contenant pour recevoir le contenu du fichier XML*/ $dom = new DOMDocument(); /*Vérifier si le fichier existe et si oui, le charger dans $dom Si non, créer un document*/ if(file_exists("test.xml")) $dom->load("test.xml"); else $dom->loadXML("<?xml version=\"1.0\" encoding=\"UTF-8\"?><exemple />");
Créer un nouvel élément /*Créer l'élément test*/ $test = $dom->createElement("test"); /*Créer le noeud nom*/ $nomNoeud = $dom->createElement("nom"); L'élément et le nœud sont créés Ils ne contiennent rien Ils ne sont pas placés
Remplir le nœud et attacher le nœud à l'élement /*Mettre une valeur au nœud*/ $nomNoeud->nodeValue = utf8_encode("Beaupré"); /*Accrocher le nœud à l'élément test*/ $test->appendChild($nomNoeud); /*Ajouter un attribut date à l'élément test*/ $test->setAttribute("date", utf8_encode("2007-01-01"));
Positionner l'élément dans le document /*Insérer l'élément test avant le premier enfant du document */ $dom-> documentElement->insertBefore( $test, $dom->documentElement->firstChild); $dom->documentElement Racine du document $dom->documentElement->firstChild Premier enfant du document
Pour détruire le dernier élément $dom->load("test.xml"); $dom-> documentElement->removeChild( $dom->documentElement->lastChild ); $dom->save("test.xml");