Bonjour, avec mes seules recherches depuis 2jours, l'indice TIOBE de Xpath a surement pris plusieurs %, au final j’atterris qd mm ici
je dois partir du XML suivant :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<data number="5883" user="001" order="5883">
[...]
</data>
<data number="5884" user="001" order="5884">
	<column>
		<parameter name="idcompte" type="cdata"><![CDATA[132]]></parameter>
		<parameter name="nomachat" type="cdata"><![CDATA[solde 2014]]></parameter>
		<parameter name="date" type="cdata"><![CDATA[2014-10-14]]></parameter>
		<parameter name="qte" type="cdata"><![CDATA[1]]></parameter>
		<parameter name="puht" type="cdata"><![CDATA[1002.86]]></parameter>
		<parameter name="idtva" type="cdata"><![CDATA[001]]></parameter>
		<parameter name="paye" type="string">1</parameter>
		<parameter name="idfourn" type="cdata"><![CDATA[098]]></parameter>
		<parameter name="idcat" type="cdata"><![CDATA[001]]></parameter>
		<parameter name="idclassif" type="cdata"><![CDATA[0]]></parameter>
	</column>
</data>
[...etc.]
dans ma fonction le PHP commence par :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
 $xml = simplexml_load_file($plgDatas.$q["table"].'.xml');
et je vous liste ci-dessous mes syntaxes de filtrage testées au fil de mes lectures
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
if ($q["id"]!="") {$xml = $xml->xpath('//data[@number='.$q["id"].' ] '); unset($q); } #OK
if ($q["limit"]!="") {$xml = $xml->xpath('//data[position()<='.$q["limit"].']'); } #OK
 
//if ($q['compt']!="") {$result= $xml->xpath('//parameter[@name="idcompte" and text()="'.$q["compt"].'"] '); } #OK 7 result mais que les attributs
//if ($q['compt']!="") {$result= $xml->xpath('//column[parameter[@name="idcompte" and .="'.$q["compt"].'"]]'); } #OK 7 result mais que les attributs
//if ($q['compt']!="") {$result= $xml->xpath('//parameter[@name="idcompte"]/text()="'.$q["compt"].'" '); } #non
if ($q['compt']!="") {$result= $xml->xpath('//parameter[@name="idcompte"]/../parameter[text()="'.$q["compt"].'"]'); } #OK 7 result mais que attributs
// if ($q['compt']!="") {$xml = $xml->xpath('//parameter[contains(text(),"'.$q["compt"].'")] ');} // nawack
Dans le meilleur des cas mon tableau $result contient uniquement les attributs des 7 résultats voulus...sans les datas.
Bref, je tente désespérément d'obtenir l'équivalent d'un SELECT idfourn FROM datas WHERE idfourn = $q['compt'] en SQL,
soit en français, tous les noeuds <data> contenant le noeud(petit-fils)<parameter> contenant l'attribut "idfourn" et dont la valeur du noeud soit $q['compt']
Par avance un millier de mercis.