programmation XML
2017-2018
Sommaire
Introduction
DOM
SAX
Liens utiles
bib
book book
Stevens W.
Attribut Explication
length nombre de noeuds
K. M. BROU Technologies XML 13
II. DOM
DomCharacterData : Nœud de type texte
Hérite de DomNode :
Méthode Explication
appendData(string data) ajoute de la donnée
deleteData(int offset, int count) supprime les données entre offset et
offset+count
insertData(int offset, string data) insère de la donnée à l'offset défini
replaceData(int offset, int count, string data) remplace de la donnée à l'offset défini
Attribut Explication
data Contenu
length longueur
Méthode Explication
createAttribute(string name) retourne un nœud de type DomAttribute
createComment(string data) retourne un nœud de type DomComment
createElement(string name) retourne un nœud de type DomElement
createTextNode(string data) retourne un nœud de type TextNode
getElementById(string id) retourne un noeud dont l'attribut faisant office d'ID
(défini dans la DTD) correspond
getElementsByTagName(string name) retourne une DomNodeList contenant les noeuds
dont le nom de balise correspond
load(string file) charge un fichier xml
loadHTMLFile(string file) charge un fichier html (pas forcemment bien
formé)
save(string file) sauvegarde de l'arbre dans un fichier
saveXML() retourne une chaîne de caractères représentant
l'arbre
validate() valide un document XML en se basant sur sa DTD
Méthode Explication
DOMXPath(DomDocument doc) Constructeur, construit un objet DOMXPath à
partir du document.
query(string path,DomNode racine) effectue une requête sur le document, et retourne
une DOMNodeList (si 'racine' est précisée, elle
devient la racine du chemin)
evaluate(string path,DomNode racine) effectue une requête sur le document, et retourne
une valeur ou une DOMNodeList (si 'racine' est
précisée, elle devient la racine du chemin)
<?php
$dom = new DomDocument; Créer l’alias DOM pour le chemin :
Validation.php E:\Cours\Cours2011\XML\Support\So
$dom->load("bib2.xml");
$b = $dom->validate(); urce\SourceDOM
if($b) echo "Document valide";
else echo "Document non valide";
?>
K. M. BROU Technologies XML 21
II. DOM
2.6. L'objet DomNodeList
Tous les résultats multiples (comprenant des nœuds)
retournés par DOM sont sous la forme d'un objet
DomNodeList.
Un objet DomNodeList n'est pas un tableau
Impossible d'accéder à ses membres avec un index entre
crochets.
La classe DomNodeList implémente l'interface Iterator de
PHP ayant les méthodes current, next, key, valid et rewind.
On n'utilise en général pas directement ces méthodes, mais en
gros ça veut dire qu'on peut parcourir un Iterator (et donc un
objet DomNodeList) dans une boucle foreach.
C'est un moyen de récupérer une référence sur un objet d'un
DomNodeList.
Autre moyen de parcourir un objet DomNodeList
Méthode item() de DomNodeList
Elle prend pour unique paramètre un index numérique.
K. M. BROU Technologies XML 22
II. DOM
Exemple : récupération d'une référence à partir d'un
DomNodeList
<?php $element = $listeElements->item(0); ?>
récupère dans $element le premier objet pointé par le
DomNodeList $listeElements.
Si on fournit un mauvais index, la méthode ne renvoie rien.
Si on exploite le résultat sans prendre de précautions, on récupère
une erreur du style : Notice: Trying to get property of non-
object
<?php
$dom = new DomDocument;
$dom->load("bib2.xml");
$listeBook = $dom->getElementsByTagName('title');
foreach($listeBook as $b)
echo $b->firstChild->nodeValue . "<br />";
?>
$b->firstChild->nodeValue permet de
récupérer la valeur du nœud textuel fils
<?php
$dom = new DomDocument;
$dom->load("bib2.xml");
$listeBook = $dom->getElementsByTagName('book');
foreach($listeBook as $d)
{$listeBook1 = $d->getElementsByTagName('last');
foreach($listeBook1 as $b)
echo $b->firstChild->nodeValue . "<br />";
echo "-------------------<br />";
}
?>
<?php
$dom = new DomDocument;
$dom->load("bib2.xml");
$listeBook = $dom->
getElementsByTagName('book');
foreach($listeBook as $b)
{echo $b->nodeValue;
if($b->hasAttribute("id"))
echo " - " . $b->getAttribute("id");
echo "<br />";
}
?>
echo $b->nodeValue ;
idem echo $b->firstChild->nodeValue ;
K. M. BROU Technologies XML 29
II. DOM
2.9. Lire les nœuds textuels
Attribut nodeValue
Permet de récupérer la valeur d'un nœud textuel.
Donne le contenu d’un nœud textuel, ou la valeur d'un attribut.
Appeler nodeValue sur le parent du nœud textuel revient à
l'appeler sur le nœud textuel lui-même.
Exemple : Titre des livres (LireNoeudTextuel.php)
<?php
$dom = new DomDocument;
$dom->load("bib2.xml");
$titre = $dom->getElementsByTagName("title");
foreach($titre as $b)
{echo $b->nodeValue ;
//idem echo $b->firstChild->nodeValue ;
echo "<br />";
}
?>
<?php
$dom = new DomDocument; // création du document XML
$dom->load("bib22.xml"); //chargement de bib22.xml
$xpath = new DOMXpath($dom);
$nodeList = $xpath->query('/bib/book/title');
foreach ($nodeList as $node)
echo $node->nodeValue . "<br/>";
?>
K. M. BROU Technologies XML 31
II. DOM
Exemple 2 : Titre du livre d’identifiant b7
Requete2.php
<?php
$dom = new DomDocument; // création du document XML
$dom->load("bib22.xml"); //chargement de bib22.xml
<?php
$dom = new DomDocument; // constructeur, création d'un document XML
ajouterNoeud.php
<?php
$dom = new DomDocument; // constructeur, création d'un document XML
$dom->load("bib2.xml"); //chargement de bib2.xml
$racine = $dom->documentElement; //noeud racine
$nouveauAuthor = $dom->createElement("author");
K. M. BROU Technologies XML
// création d'un élément author 40
II. DOM
ajouterNoeudAvant.php
modifierNoeud.php
<?php
//creer le nouveau noeud
$domNew = new DomDocument; // constructeur, création d'un document XML
// Remplacement
$oldNode->parentNode->replaceChild($newNode, $oldNode);
<?php
$dom = new DomDocument; // constructeur, création d'un document XML
$dom->load("bib22.xml"); //chargement de bib22.xml
$racine = $dom->documentElement;
$book = $dom->getElementsByTagName("book")->item(6); //recherche du 7e livre
$racine->removeChild($book); //suppression du noeud
$dom->save('bib22.xml'); //sauvegarde dans le fichier bib22.xml
?>
Event Parser
Handler