2011-01-07 64 views
1

我從下面的代碼檢索文件中的XML。然而,當XML在".$image["url"]."的位置變得更深時,我試圖檢索其中一個圖像,但它不起作用。我還需要搜索圖像,因爲XML中的SIZE變量有多個標記(下面的XML)。PHP返回嵌套XML

如何在我已經將$ xml-> xpath定義到更高的容器後定義這個?

$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正在通過搜索。

<?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> 

更新功能:不顯示圖像。

 $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++; 
     } 

回答

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; 
    } 
} 

這會搶例如拇指圖像的URL。

+0

謝謝你dqhendricks,這個作品,我已經把它放在第一個'foreach'循環下,它現在返回圖像! (不能相信我沒有想到在循環內運行另一個循環)。但是,如果在XML中返回多個電影,每部電影都具有與第一部電影相同的圖像...有什麼想法? – medoix 2011-01-08 00:11:43