xpath_logoXpath 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:

Parcourir un fichier XML grâce à XPath et PHP
Share on FacebookTweet about this on TwitterShare on Google+Email this to someone
Taggé sur :        

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous utilisons des cookies afin de nous assurer de vous proposer la meilleure expérience sur ce site.
Ok