如果另一个属性具有特定值,则仅获取属性

时间:2011-03-31 08:21:38

标签: php xml simplexml

好的,关于stackoverflow的第一个问题。

我有以下xml:

<movies>
  <movie>
    <cast>
      <person name="Tim Johnson" character="" job="Director"/> 
      <person name="Avril Lavigne" character="Heather (voice)" job="Actor"/> 
      <person name="Omid Djalili" character="Tiger (voice)" job="Actor"/>
      <person name="Karey Kirkpatrick" character="" job="Director"/>
    </cast>
  </movie>
</movies>

我像这样检索它:

<?php $xml_getinfo_result = new SimpleXMLElement(file_get_contents($tmdb_getinfo_result)); ?>

要获得演员表,我使用以下内容:

$i = 0;
while ($xml_getinfo_result->movies->movie->cast->person[$i]) {
  $tmdb_actors = $xml_getinfo_result->movies->movie->cast->person[$i]->attributes()->name;
  echo "<li>".$tmdb_actors."</li>";
$i++;
}

这给了我:

<li>Tim Johnson</li>
<li>Avril Lavigne</li>
<li>Omid Djalili</li>
<li>Karey Kirkpatrick</li>

但是,如果我只想显示工作为“演员”的人,我该怎么办?

5 个答案:

答案 0 :(得分:0)

两种可能性:

第一个,您获得所有数据并且只显示actor:

$i = 0;
while ($xml_getinfo_result->movies->movie->cast->person[$i]) {
  if ($xml_getinfo_result->movies->movie->cast->person[$i]->attributes()->job == "Actor") {
     $tmdb_actors = $xml_getinfo_result->movies->movie->cast->person[$i]->attributes()->name;
     echo "<li>".$tmdb_actors."</li>";
  }
$i++;
}

第二个是仅解析作为actor的<person>并显示所有结果。

答案 1 :(得分:0)

$i = 0;
while ($xml_getinfo_result->movies->movie->cast->person[$i]) {
  $job = $xml_getinfo_result->movies->movie->cast->person[$i]->attributes()->job;
  if ($job == 'Actor') {
    $tmdb_actors = $xml_getinfo_result->movies->movie->cast->person[$i]->attributes()->name;
    echo "<li>".$tmdb_actors."</li>";
    }
  $i++;
  }

答案 2 :(得分:0)

您可以使用xpath

$actorNodes = $xml_getinfo_result->xpath( '//person[@job="Actor"]' );
foreach( $actorNodes as $actorNode )
{
    echo "<li>".$actorNode->attributes()->name."</li>";
}

答案 3 :(得分:0)

我将它放在一个foreach声明中

foreach ($xml_getinfo_result->movies->movie->cast->person as $id => $person) {
    if ($person->attributes()->job === 'Actor') {
        echo '<li>' . $person->attributes()->name . '</li>';
    }
}

答案 4 :(得分:0)

你可以这样做:

$i = 0;
while ($xml_getinfo_result->movies->movie->cast->person[$i]) {
  $tmdb_job = $xml_getinfo_result->movies->movie->cast->person[$i]->attributes()->job;
  if($tmdb_job == 'Actor'){
     $tmdb_name = $xml_getinfo_result->movies->movie->cast->person[$i]->attributes()->name;
     echo "<li>".$tmdb_name."</li>";
  }
$i++;
}
相关问题