XPATH SimpleXML and PHP

Some of my friends have to make rapid search in a XML document. So they make a foreach and test all node to find what they search. SimpleXML implement an XPATH resolver.

So i have an XML file like this :


<root>
<quizz datestart="20070710" dateend="20070724" question="1">
<question1 video="1">
<intitule><!--[CDATA[Pour voyager en toute sécurité avec bébé, il est important :]]--></intitule>
<responses>
<response1><!--[CDATA[de mettre des filets de sécurité entre la partie avant et arrière]]--></response1>
<response2><!--[CDATA[d'éviter de mettre des objets lourds sur la plage arrière]]--></response2>
<response3><!--[CDATA[de prendre bébé sur ses genoux]]--></response3>
</responses>
</question1>
<question2 video="2">
<intitule><!--[CDATA[Je suis enceinte, pour plus de confort bord, il est préférable de :]]--></intitule>
<responses>
<response1><!--[CDATA[s'allonger entièrement]]--></response1>
<response2><!--[CDATA[de se placer l’arrière avec un coussin pour bien soutenir le dos]]--></response2>
<response3><!--[CDATA[de positionner son siège la verticale pour être très droite]]--></response3>
</responses>
</question2>
</quizz>
<quizz datestart="20070725" dateend="20070801" question="2">
<question1 video="6">
<intitule><!--[CDATA[Enceinte, les voyages longs en voiture sont déconseillés :]]--></intitule>
<responses>
<response1><!--[CDATA[pendant toute la durée de la grossesse]]--></response1>
<response2><!--[CDATA[durant les premiers mois et partir du 8ième mois]]--></response2>
<response3><!--[CDATA[ne sont pas déconseillés]]--></response3>
</responses>
</question1>
<question2 video="5">
<intitule><!--[CDATA[En voiture pour réchauffer un biberon :]]--></intitule>
<responses>
<response1><!--[CDATA[J'utilise la prise 12V prévue cet effet dans Scénic]]--></response1>
<response2><!--[CDATA[Je fais un feu de camp sur le bord de la route]]--></response2>
<response3><!--[CDATA[Je mets le biberon dans une couverture de survie]]--></response3>
</responses>
</question2>
</quizz>
</root>

So we load our XML file with simplexml_load_file() function.
To get all <intitule> node we just have to make : $xpathsimple = $xmlsimple->xpath("//intitule");

We will have an array with the four nodes.

To get a quizz node in the current date, we just have to make an xpath on the attributes datestart and dateend : $xpathsimple = $xmlsimple->xpath("*[@datestart <= '".date("Ymd")."' and @dateend >= '".date("Ymd")."']");

To find the video 5 for exemple, just do : $xpathsimple = $xmlsimple->xpath("//*[@video = '5']");

Xpath provide a lot of searching features… just do some experiments :)


About this entry