在 PHP 中使用多个查询加载 XML 数据时出现问题

Problem loading XML data using multiple queries in PHP

我有以下 XML 文件

<response>
<query>hello</query>
<zone name="url">
    <records s="*" n="0" total="0"/>
</zone>
<zone name="people">
    <records s="*" n="20" total="58" next="/result?q=hello&zone=people&s=AoIIRib9grewqTU2MGRkMS02YzgzLTQxYQ%3D" nextStart="AoIIRib9GD8NaWRlbnRpddfsdfk0OWQ=">
        <people id="1140172" url="/people/1140172">
        </people>
        <people id="1482231" url="/people/1482231">
        </people>
        <people id="832153" url="/people/832153">
        </people>
    </records>
</zone>
<zone name="collection">
    <records s="*" n="20" total="496" next="/result?q=hello&zone=collection&s=AoIIQsdfszdTIyNzc3MDUzNg%3D%3D" nextStart="AoIIQ3sHAysdfdszc3MDUzNg==">
        <work id="208227193" url="/work/208227193">
        </work>
        <work id="225096966" url="/work/225096966">
        </work>
        <work id="225096968" url="/work/225096968">
        </work>
    </records>
</zone>
<zone name="gazette">
    <records s="*" n="20" total="91239" next="/result?q=hello&zone=gazette&s=AoIIRdAyNjk3NzQ%3D" nextStart="AoIIgdfgek3NzQ=">
        <article id="249121748" url="/newspaper/249121748">
        </article>
        <article id="225072553" url="/newspaper/225072553">
        </article>
        <article id="249121741" url="/newspaper/249121741">
        </article>
    </records>
</zone>
<zone name="book">
    <records s="*" n="20" total="9245" next="/result?q=hello&zone=book&s=AogxMjk1Mg%3D%3D" nextStart="AoIIQ6HewytzdTIjk1Mg==">
        <work id="19554432" url="/work/19554432">
        </work>
        <work id="31597077" url="/work/31597077">
        </work>
        <work id="11135964" url="/work/11135964">
        </work>
    </records>
  </zone>
</response>

我正在尝试 运行 使用相同数据在同一页面上进行多个查询,但它有一些小问题。有些“区域”加载,有些则不加载。

这是我用来加载数据的PHP:

    if ($_SERVER["REQUEST_METHOD"] == "GET") { 
     $last_name= $_GET["lastname"];
     $first_name= $_GET["firstname"];
     $result = simplexml_load_string(file_get_contents('https://api.url/v2/result?key=e4oheeek7rrr&zone=all&q='.$first_name.'%20'.$last_name));
      
        $books = $result->zone[5]->records->work;
        $newspaper = $result->zone[8]->records->article;
        $collection = $result->zone[3]->records->work;
        $gazette = $result->zone[4]->records->article;
    }

然后在部分中我使用以下内容来显示结果,但它不会一次加载所有区域。如果我 运行 单独查询它们就可以正常工作。

下面是 2 个示例查询;

 // Display XML Results for Book Zone
 $id = 0;
     foreach ($books as $book) {
echo ' <div class="col-xs-12 col-sm-12 col-md-3 col-lg-3 col-xl-3 flex-container">';
     foreach ($book->title as $titles) {
        echo "<div class='book'>";
        echo "<span class='titles'>".$titles."</span><br>";
     }
      
     foreach ($book->snippet as $about){
        echo "<p>Snippet : ".$about."</p>";
     }
         
     foreach ($book->type as $type){
        echo "<p>Type: ".$type."</p>";
     }
         
     foreach ($book->identifier as $links){
        echo "<p>Websites: <a href='".$links."' target='_blank' title='Opens in new window' data-toggle='tooltip'>".$links."</a></p>";
     }
         
     foreach ($book->contributor as $contributor){
        echo "<p>Contributor : ".$contributor."<p>";
     }
         
     foreach ($book->issued as $issued){
        echo "<p>Issued : ".$issued."</p>";
     }
     
if ($id==7){
    echo "<p>Please register to view more results</p>";
    break;
     }
$id= $id+1;

         echo '</div></div>';
   }

这是第二个查询。如果我尝试显示来自 4 个“区域”的数据,有时会加载 1 或 2 个,并且每次加载的“区域”可能不同。

// load data for Newspaper Zone
$z = 0;    
    foreach ($newspaper as $paper) {
        
    foreach ($paper->title as $papername) {
        echo "<span class='titles'>Newspaper: ".$papername."</span><br>";
     }
    foreach ($paper->heading as $heading) {
        echo "<span class='headings'> Headings: ".$heading."</span>";
     }
    foreach ($paper->snippet as $snippets){
        echo "<span class='snippet'>Snippet: ".$snippets."</span>";
     }
    foreach ($paper->troveurl as $web){
        echo "<b>Websites: </b><a href='".$web."'>".$web."</a><br>";
     }
    foreach ($paper->edition as $edition){
        echo "<b>Edition </b>: ".$edition."<br>";
     }
$z= $z+1;
if ($z==5){
    echo "Please register to view more results";
    break;
     }
   }

谢谢。

使用 Xpath 按名称属性而不是位置获取区域。

$response = new SimpleXMLElement($xmlString);
$books = $response->xpath('//zone[@name="books"]/records/*');
foreach ($books as $book) {
  // ...
}