lire noeuds xml a partir d'un attribut

Eléphant du PHP | 109 Messages

20 mars 2009, 18:59

Bonjour je ne trouve pas meme en lisant le manuel en ligne comment lire les noeud d'un item a partir de son attribut id

Code : Tout sélectionner

<item id="8"> <photo>arbres dans la brume au fond</photo> <size>60x40</size> <raw>4635</raw> </item>
ici je voudrais sélectionner l'item ou l'attribut (''id") = 8
et obtenir 3 variables photo, size, raw pour cet item la

il semble qu'en php5 il n'y ait pas de getElementsByAtrribute

merci

Eléphant du PHP | 141 Messages

20 mars 2009, 19:12

$xml_string = '<item id="10">
	<photo>arbres dans la brume au fond</photo>
	<size>60x40</size>
	<raw>4635</raw>
</item>';
$xml = simplexml_load_string($xml_string);
echo  $xml->attributes()->id;

Eléphant du PHP | 109 Messages

20 mars 2009, 19:18

merci mais ce n'est pas ca que je cherche

si j'ai 300 items dans mon fichier xml il faut un WHERE id= 8 quelque part , je veux lire uniquement cet item la pas les autres

je ne cherche pas a faire un echo qui me retourne 8 , 8 c'est ma valeur connue , la cle avec la quelle je cherche dans le xml

il y a pas un truc du genre getElementByAttribute ?
ou alors getElementsByTagName("item")->Attribute("id",8) ?

Eléphant du PHP | 141 Messages

20 mars 2009, 19:23

D'accord, j'avais mal compris ;)

A moins qu'il existe des méthodes natives pour faire une recherche, je pense que tu devras parcourir tous les "item" jusqu'à trouver l'id égal à 8

Eléphant du PHP | 109 Messages

20 mars 2009, 19:24

c'est quand même très indigeste !
bon s'il n'y a rien d'autre

merci

Eléphant du PHP | 141 Messages

20 mars 2009, 19:32

Je retire ce que j'ai dis, je connaissais pas la méthode xpath :
$xml_string = '<root>
	<item id="10">
		<photo>10 arbres dans la brume au fond</photo>
		<size>100x100</size>
		<raw>104635</raw>
	</item>
	<item id="9">
		<photo>9 arbres dans la brume au fond</photo>
		<size>90x90</size>
		<raw>94635</raw>
	</item>
	<item id="8">
		<photo>8 arbres dans la brume au fond</photo>
		<size>80x80</size>
		<raw>84635</raw>
	</item>
</root>';
$xml = simplexml_load_string($xml_string);
$result = $xml->xpath("/root/item[@id='9']");

print_r($result);
La balise racine est obligatoire par contre ;)

Eléphant du PHP | 109 Messages

20 mars 2009, 19:41

merci ça semble de suite ressembler davantage a ce que je cherche
j'essaye

Eléphant du PHP | 141 Messages

20 mars 2009, 19:46

La méthode xpath fait partie de l'objet SimpleXML donc il faut que tu puisse le récupérer en XML.

Eléphant du PHP | 109 Messages

20 mars 2009, 19:48

je n'ai pas d'erreur mais maintenant que j'ai mon item il faut trouver la méthode pour extraire les noeuds de manière claire (pas en vrac comme les exemples qu'on trouve)


foreach(..)
{

$photo= $result->getElementsByTagName("photo")->item(0)->nodeValue;
}

ne marche pas

Eléphant du PHP | 141 Messages

20 mars 2009, 19:52

Si tu gardes le résultat en XML, ta variable $result est un objet SimpleXML, donc tout simplement :
echo $result->photo;

Eléphant du PHP | 109 Messages

20 mars 2009, 19:57

non ça ne marche pas comme ca

j'obtiens Trying to get property of non-object

je voudrais récupérer ca dans une variable

$photo= $result->photo;

mais photo tel quel ne marche pas, ni non plus $photo= $result->'photo';

meme avec

$node = '/galerie/items/item[@id=8]/photo';

echo $xml->$node;



j'obtiens rien

Eléphant du PHP | 141 Messages

20 mars 2009, 20:22

Et
$photo = $result[0]->photo;
?

Eléphant du PHP | 109 Messages

20 mars 2009, 20:47

yahoooooooooooooooooooo

ca marche
Julian si tu étais pas barbu je te ferais une bise :-)

merci

Eléphant du PHP | 141 Messages

20 mars 2009, 21:04

yahoooooooooooooooooooo

ca marche
Julian si tu étais pas barbu je te ferais une bise :-)

merci
Mdr ! Je me contente du merci ;)