2011-01-07 6 views
1

私は、以下のコードに従ってファイルからXMLを取得しています。しかし、XMLが".$image["url"]."の時点で深くなると、画像の1つを取得しようとしていますが、動作していません。私はまた、XML(以下のXML)のSIZE変数によって複数のタグがあるので、画像を検索する必要があります。PHP returnネストされた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

+0

ああ。 $ images = $ movie-> xpath( '/ images/image')を使ってください。代わりに – dqhendricks

+0

と今何も、私は今のように機能とのポストを更新しました。 – medoix