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 ![]()


4 Comments
Jump to comment form | comments rss [?] | trackback uri [?]