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
