Page 1 sur 1

lire noeuds xml a partir d'un attribut

Posté : 20 mars 2009, 18:59
par rufus_
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

Posté : 20 mars 2009, 19:12
par julian
$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;

Posté : 20 mars 2009, 19:18
par rufus_
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) ?

Posté : 20 mars 2009, 19:23
par julian
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

Posté : 20 mars 2009, 19:24
par rufus_
c'est quand même très indigeste !
bon s'il n'y a rien d'autre

merci

Posté : 20 mars 2009, 19:32
par julian
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 ;)

Posté : 20 mars 2009, 19:41
par rufus_
merci ça semble de suite ressembler davantage a ce que je cherche
j'essaye

Posté : 20 mars 2009, 19:46
par julian
La méthode xpath fait partie de l'objet SimpleXML donc il faut que tu puisse le récupérer en XML.

Posté : 20 mars 2009, 19:48
par rufus_
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

Posté : 20 mars 2009, 19:52
par julian
Si tu gardes le résultat en XML, ta variable $result est un objet SimpleXML, donc tout simplement :
echo $result->photo;

Posté : 20 mars 2009, 19:57
par rufus_
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

Posté : 20 mars 2009, 20:22
par julian
Et
$photo = $result[0]->photo;
?

Posté : 20 mars 2009, 20:47
par rufus_
yahoooooooooooooooooooo

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

merci

Posté : 20 mars 2009, 21:04
par julian
yahoooooooooooooooooooo

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

merci
Mdr ! Je me contente du merci ;)