Xpath est un langage très pratique qui permet de parcourir un fichier XML facilement. Nous allons faire ensemble un petit tour du fonctionnement de celui-ci sous l’environnement PHP (à partir de PHP 5.2.0). Pour ceux qui veulent une documentation complète, je vous invite à lire le tutoriel de w3schools.com.
Commençons par ouvrir notre fichier XML
Tout d’abord, faisons une boucle simple sur une liste de noeuds XML:
$xml = new SimpleXMLElement('CHEMIN_DU_FICHIER_XML', Null, True); $nodes = $xml->xpath('VOTRE_REQUETE_XPATH'); foreach($nodes as $node) { // ON PARCOURS LES NODES $node->getName() // Retourne le nom de la node actuelle $node->nomEnfant // Va chercher la valeur de l'enfant ayant pour nom "nomEnfant" (Attention, sensible à la casse!!!) }
La syntaxe des requêtes XPath
Dans l’exemple précédent, il y’a une ligne que nous avons besoin de détailler
$nodes = $xml->xpath('VOTRE_REQUETE_XPATH');
Nous allons voir ensemble comment s’écrit ‘VOTRE_REQUETE_XPATH’
Les expressions
Expression | Explication |
---|---|
nomdelanode | Toutes les nodes nommées « nomdelanode » |
/ | Attaché à la racine du document |
// | N’importe où dans le document |
. | Node courante |
.. | Node parente |
@ | Sélectionner un attribut |
Quelques exemples pour illustrer tout ça:
- /root/elements/element : Va sélectionner les nodes nommées « element » qui ont comme parent « elements » qui a lui même comme parent « root »
- //elements/element : Va sélectionner les nodes nommées « element » qui ont comme parent « elements » peut importe leur hiérarchie dans le document.
- //elements/.. : Sélectionne la node parente de toutes les nodes « elements »
- //@myattribute : Sélectionne tous les attributs ayant pour nom « myattribute » peu importe leur emplacement dans le document
Les prédicats
Prédicat | EXPLICATION |
---|---|
/elements/element[1] | Sélectionne le 1er « element » des « elements » |
/elements/element[last()] | Sélectionne le dernier « element » des « elements » |
/elements/element[last()-1] | Sélection l’avant dernier « element » des elements » |
/elements/element[position()<3] | Sélectionne les 2 premiers « element » des « elements » |
//element[@myattribute] | Sélectionne les « element » ayant un attribut « myattribute » |
//element[@myattribute=’myvalue’] | Sélectionne les « element » ayant un attribut « myattribute » qui a pour valeur « myvalue » |
/elements/element[subelement>10] | Sélectionne les « element » qui on un « subelement » ayant une valeur supérieure à 10 de « elements » |
/elements/element[subelement>10]/subsubelement | Sélectionne les « subsubelement » de « element » qui on un « subelement » ayant une valeur supérieure à 10 de « elements » |
Chercher des éléments inconnus
Syntaxe | Explication |
---|---|
* | N’importe quelle node d’un certain type |
@* | N’importe quel attribut |
node() | Toutes les nodes de tous les types |
On passe aux exemples!
- /elements/* : Toutes les nodes enfant de « elements » (peut importe leur nom)
- //subelement[@*] : Tous les attributs des nodes « subelement » peu importe leur place dans le document
Vous connaissez désormais les principales règles du langage XPath, qui vous permettrons déjà de parcourir simplement vos fichiers XML. Si vous désirez en savoir plus, ce site entre plus en détail pour des requêtes plus poussées
XPath et PHP
Nous avons effectué notre requête de selection de nodes ou d’attributs, nous entrons désormais dans notre boucle « foreach » et pouvons commencer la manipulation de notre objet $node
Syntaxe | Explication |
---|---|
$node->getName() | Retourne le nom de la node actuelle (Pratique si notre requête est du type « /elements/* ») |
$node->nomEnfant | Va chercher la valeur de l’enfant ayant pour nom « nomEnfant » (Attention, sensible à la casse!!!) |
Si toutes les informations sont encore assez floues pour vous, cela est normal. Pour concrétiser ces nouvelles connaissances, rien de mieux que la pratique 😉
Lecture Complémentaire: