1

i am retrieving XML from a file as per code below. However when the XML gets deeper at the point of ".$image["url"]." i am trying to retrieve one of the images but it is not working. I would also need to search the images as there are multiple tags by the SIZE variable in the XML (XML below).

how do you define this after i have allready defined the $xml->xpath to a higher container?

$searchurl = "movies.xml";
$xml = simplexml_load_file($searchurl);
$i = 0;
foreach($xml->xpath('/movies/movie') as $movie){
    $image = $xml->xpath('/movies/movie/images/image');
    echo "<table id=\"ctable\">"
        ."<thead><tr><th>"
        ."<th width=\"100%\"><a href=\"JavaScript:void(0);\" onclick=\"showHide('movie".$movie->id."','span".$movie->id."')\">"
        ."<span id=\"span".$movie->id."\"><img src=\"images\icon_collapse.gif\" class=\"expand\" alt=\"Expand\"></span>"
        ."<span>".$movie->name."</span></a></th>"
        ."<th><span></span></th>"
        ."</th></tr></thead>";
    echo "<table><tfoot id=\"movie".$movie->id."\">"
        ."<tr><td rowspan=\"6\"><a class=\"thumbnail\" href=\"#thumb\"><img src=\"".$image["url"]."\" height=\"150px\" width=\"150px\"><span><img src=\"".$image["url"]."\"/><br/>".$movie->name."</span></a></td><td rowspan=\"6\"><img class=\"line\" width=\"2\" height=\"100%\"></td><td class=\"jralign\">Movie ID:</td><td>".$movie->id."</td></tr>"
        ."<tr><td class=\"jralign\">Movie Link:</td><td><a href=\"".$movie->url."\">".$movie->url."</a></td></tr>"
        ."<tr><td class=\"jralign\">Released:</td><td>".$movie->released."</td></tr>"
        ."<tr><td class=\"jralign\">Classification:</td><td>".$movie->certification."</td></tr>"
        ."<tr><td class=\"jralign\">Adult:</td><td>".$movie->adult."</td></tr>"
        ."<tr><td class=\"jralign\" valign=\"top\">Overview:</td><td>".$movie->overview."</td></tr>"
        ."</tfoot></table>"
        ."</table><br/>";
    $i++;
}

XML It is searching through.

<?xml version="1.0" encoding="UTF-8"?> 
<movies> 
  <movie> 
    <score></score> 
    <popularity>3</popularity> 
    <translated></translated> 
    <adult>false</adult> 
    <language>en</language> 
    <original_name>Transformers</original_name> 
    <name>Transformers</name> 
    <alternative_name>The Transformers</alternative_name> 
    <type>movie</type> 
    <id>1858</id> 
    <imdb_id>tt0418279</imdb_id> 
    <url>http://www.themoviedb.org/movie/1858</url> 
    <votes>61</votes> 
    <rating>7.4</rating> 
    <certification>PG-13</certification> 
    <overview>Young teenager Sam Witwicky becomes involved in the ancient struggle between two extraterrestrial factions of transforming robots, the heroic Autobots and the evil Decepticons.  Sam holds the clue to unimaginable power and the Decepticons will stop at nothing to retrieve it.</overview> 
    <released>2007-07-04</released> 
    <images> 
      <image type="poster" url="transformers-original.jpg" size="original" width="1000" height="1500" id="4c9ea5cf5e73d67049000233"/> 
      <image type="poster" url="transformers-mid.jpg" size="mid" width="500" height="750" id="4c9ea5cf5e73d67049000233"/> 
      <image type="poster" url="transformers-cover.jpg" size="cover" width="185" height="278" id="4c9ea5cf5e73d67049000233"/> 
      <image type="poster" url="transformers-thumb.jpg" size="thumb" width="92" height="138" id="4c9ea5cf5e73d67049000233"/> 
      </images> 
      <version>141</version> 
      <last_modified_at>2011-01-04 16:33:25</last_modified_at> 
    </movie>
</movies>

Updated Function: Not displaying images.

        $searchurl = "movies.xml";
        $xml = simplexml_load_file($searchurl); 
foreach($xml->xpath('/movies/movie') as $movie){
            $images = $movie->xpath('/images/image');
            $image_url = '';
            foreach($images as $image) {
                $attributes = $image->attributes();
                if ($attributes['size'] == 'thumb') {
                    $image_url = $attributes['url'];
                    break;
                }
            }
            echo "<table id=\"ctable\">"
                ."<thead><tr><th>"
                ."<th width=\"100%\"><a href=\"JavaScript:void(0);\" onclick=\"showHide('movie".$movie->id."','span".$movie->id."')\">"
                ."<span id=\"span".$movie->id."\"><img src=\"images\icon_collapse.gif\" class=\"expand\" alt=\"Expand\"></span>"
                ."<span>".$movie->name."</span></a></th>"
                ."<th><span>".$this->isWatching($movie->id, $uid, $movie->name, 'movie')."</span></th>"
                ."</th></tr></thead>";
            echo "<table><tfoot id=\"movie".$movie->id."\">"
                ."<tr><td rowspan=\"6\"><a class=\"thumbnail\" href=\"#thumb\"><img src=\"".$image_url."\" height=\"150px\" width=\"150px\"><span><img src=\"".$image_url."\"/><br/>".$movie->name."</span></a></td><td rowspan=\"6\"><img class=\"line\" width=\"2\" height=\"100%\"></td><td class=\"jralign\">Movie ID:</td><td>".$movie->id."</td></tr>"
                ."<tr><td class=\"jralign\">Movie Link:</td><td><a href=\"".$movie->url."\">".$movie->url."</a></td></tr>"
                ."<tr><td class=\"jralign\">Released:</td><td>".$movie->released."</td></tr>"
                ."<tr><td class=\"jralign\">Classification:</td><td>".$movie->certification."</td></tr>"
                ."<tr><td class=\"jralign\">Adult:</td><td>".$movie->adult."</td></tr>"
                ."<tr><td class=\"jralign\" valign=\"top\">Overview:</td><td>".$movie->overview."</td></tr>"
                ."</tfoot></table>"
                ."</table><br/>";
            $i++;
        }

1 Answer 1

2
$images = $xml->xpath('/movies/movie/images/image');
$needed_image_url = '';
foreach($images as $image) {
    $attributes = $image->attributes();
    if ($attributes['size'] == 'thumb') {
        $needed_image_url = $attributes['url'];
        break;
    }
}

this would grab the thumb image url for instance.

Sign up to request clarification or add additional context in comments.

5 Comments

thank you dqhendricks, this works and i have put that under the first 'foreach' loop and it returns images now! (cannot believe i didnt think to run another loop inside the loop). However if multiple movies are returned in the XML each movie has the same image as the first one... any ideas?
oh yeah. just use $images = $movie->xpath('/images/image'); instead
and now nothing, i have updated post with function as it is now.
ok i got it to work.. dont ask me how it works but if someone feels upto explaing, that would be good. i changed '$images = $movie->xpath('/images/image');' to '$images = $movie->xpath('images/image');' - Just removed the beginning /
oh ya. leaving out the first slash means it's a relative path.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.