2010-05-18 16 views
0

J'utilise PHP pour itérer sur le jeu de résultats suivant, le but est de construire un lien hypertexte pour chaque résultat en utilisant une boucle foreach. J'ai stocké le résultat XML dans les images $, et ont construit cette boucle:Comment renvoyer la valeur des attributs owner et id respectivement à partir d'un ensemble de résultats XML en utilisant PHP?

foreach ($images as $image) { 
    //Build link to each photo returned 

    //base URL 
    $flickrPhotoUrl = 'http://www.flickr.com/photos/'; 
    //Append user ID 
    $flickrPhotoUrl .= ""; 
    echo $flickrPhotoUrl;  } 

Voici un exemple de résultat de Flickr:

<photos page="1" pages="10982" perpage="10" total="109813"> 
    <photo id="4616840471" owner="[email protected]" secret="1b83173bc0" server="4013" farm="5" title="Strawberry Bears" ispublic="1" isfriend="0" isfamily="0"></photo> 
<photo id="4616612597" owner="[email protected]" secret="f626214382" server="4059" farm="5" title="Yarn Chef Minestrone - Grickle Grass" ispublic="1" isfriend="0" isfamily="0"></photo> 
<photo id="4616469567" owner="[email protected]" secret="6911a66838" server="4022" farm="5" title="P5130121.JPG" ispublic="1" isfriend="0" isfamily="0"></photo> 
<photo id="4617076736" owner="[email protected]" secret="8b990acba4" server="4047" farm="5" title="P5130106.JPG" ispublic="1" isfriend="0" isfamily="0"></photo> 
<photo id="4616470013" owner="[email protected]" secret="44600b3836" server="4036" farm="5" title="P5130125.JPG" ispublic="1" isfriend="0" isfamily="0"></photo> 
<photo id="4616466147" owner="[email protected]" secret="554eab8667" server="4052" farm="5" title="P5130116.JPG" ispublic="1" isfriend="0" isfamily="0"></photo> 
<photo id="4617082398" owner="[email protected]" secret="4a2b663442" server="3350" farm="4" title="P5130118.JPG" ispublic="1" isfriend="0" isfamily="0"></photo> 
<photo id="4617078272" owner="[email protected]" secret="357737017b" server="4013" farm="5" title="P5130109.JPG" ispublic="1" isfriend="0" isfamily="0"></photo> 
<photo id="4617081446" owner="[email protected]" secret="1f87726497" server="4048" farm="5" title="P5130117.JPG" ispublic="1" isfriend="0" isfamily="0"></photo> 
<photo id="4617077676" owner="[email protected]" secret="77ca9f754a" server="3330" farm="4" title="P5130108.JPG" ispublic="1" isfriend="0" isfamily="0"></photo> 

Répondre

1

Vous pouvez utiliser PHP SimpleXML pour manipuler/traverser votre XML facilement. En supposant que vous avez votre résultat de votre chaîne XML résultant stockée dans les images $,

$images_xml = simplexml_load_string($images); 
$flickr_url = "http://flickr.com/photos/"; 

foreach($images_xml->children() as $image) 
{ 
    $attributes = $image->attributes(); 
    $image_url = $flickr_url . $attributes->id; 
    //Do whatever you want to do with the link 
    //for example, echo it 
    echo "<br /><a href=\"". $image_url ."\">" . $attributes->title . "</a>"; 

    //Not sure if the link points to an actual image, but is the idea :) 
} 

Juste à titre de référence http://www.php.net/manual/en/book.simplexml.php

Hope qui aide.

0

J'utilise XML_Unserializer de PEAR


$options = array(
    'complexType' => 'object', 
    'encoding' => 'utf-8', 
    'parseAttributes' => TRUE, 
    'returnResult' => TRUE 
); 
$xr = new XML_Unserializer($options); 
$images = $xr->unserialize($images); 

$flickrPhotoUrl = 'http://www.flickr.com/photos/'; 

foreach($images->photos as $photo) 
{ 
$flickrPhotoUrl .= $photo->owner; 
} 
+0

J'ai essayé cela de différentes manières et j'ai échoué à chaque fois (obtenir une erreur "Fin de document invalide à la ligne d'entrée XML 1: 1", même avec un contenu XML/RSS validé). En outre, j'ai trouvé que j'avais besoin d'ajouter "require_once 'XML/Unserializer.php';" avant d'appeler l'objet XML_Unserializer. –

+0

Oui le besoin est d'inclure la bibliothèque PEAR. Si nous regardons les exemples de données ci-dessus - il n'y a pas de finitions - J'utilise cet objet PEAR sur un site de production qui exécute des désérialisations toute la journée sans problème - c'est peut-être la version que vous avez installée –