PHP返回嵌套XML

时间:2011-01-07 23:40:54

标签: php xml xml-parsing

我正在按照下面的代码从文件中检索XML。然而,当XML在".$image["url"]."点变深时,我试图检索其中一个图像,但它不起作用。我还需要搜索图像,因为XML中的SIZE变量有多个标签(下面的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++;
        }

1 个答案:

答案 0 :(得分: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;
    }
}

这会抓住拇指图像网址。