【问题标题】:Loop through xml nodes with simplexml使用 simplexml 循环遍历 xml 节点
【发布时间】:2017-02-22 10:44:47
【问题描述】:

我试图在我的网站上创建一个工作表,从我可以访问的 xml 提要中提取信息...我查看了各种在线示例和视频,但我似乎无法理解它是如何工作的。我的 xml 提要返回以下节点结构:

<OutputVacancyAsXml>
  <Vacancy>
    <VacancyID></VacancyID>
    <Job></Job>
    <ClosingDate></ClosingDate>
  </Vacancy>
</OutputVacancyAsXml>

我已经用这段代码成功地完成了一项:

<?php
    $x = simplexml_load_file('https://www.octopus-hr.co.uk/recruit/OutputVacancyAsXml.aspx?CompanyID=400-73A3BCA1-D952-4BA6-AADB-D8BF3B495DF6');
    echo $x->Vacancy[5]->Job;
?>

但将其转换为 foreach 似乎是我苦苦挣扎的地方。这是我到目前为止没有运气尝试过的代码;

<?php
$html = "";
$url = "https://www.octopus-hr.co.uk/recruit/OutputVacancyAsXml.aspx?CompanyID=400-73A3BCA1-D952-4BA6-AADB-D8BF3B495DF6";
$xml = simplexml_load_file($url);
for ($i = 0; $i < 10; $i++) {
  $title = $xml->OutputVacancyAsXml->Vacancy[$i]->job;
  $html .= "<p>$title</p>";

}
echo $html;
?>

谢谢大家:)

【问题讨论】:

    标签: php xml foreach simplexml


    【解决方案1】:

    取自documentation

    注意:

    属性(前面示例中的 $movies->movie)不是数组。他们 是可迭代和可访问的对象。

    记住这一点,您可以使用foreach 简单地运行节点

    $xml = simplexml_load_file($url);
    foreach ($xml->OutputVacancyAsXml->Vacancy as $vacanacy)
    {
        echo (string)$vacanacy->Job; // Echo out the Job Title
    }
    

    【讨论】:

    • 感谢 KhorneHoly - 所以我把它放在一起想出了这个,但它似乎不起作用...... octopus-hr.co.uk/recruit/…"; $xml = simplexml_load_file($url); foreach ($xml->OutputVacancyAsXml->Vacancy as $vacanacy) { echo (string)$vacanacy->Job; // 显示职位名称 } ?>
    • 不确定我是否应该在此处添加 KhorneHoly - 看起来没有代码区域...
    【解决方案2】:

    好的,看来我找到了解决方案。这是对我有用的代码加上它包含一些重复的代码(它显示每个项目 4 次!)...

    <?php
    
    
                  $x = simplexml_load_file('https://www.octopus-hr.co.uk/recruit/OutputVacancyAsXml.aspx?CompanyID=400-73A3BCA1-D952-4BA6-AADB-D8BF3B495DF6');
    
                $num = count($x->Vacancy);
    
                //echo "num is $num";
    
                $stopduplicates = array();
    
                for ($i = 0; $i < $num; $i++) {
    
    
               $job = $x->Vacancy[$i]->Job;
                  $closingdate = $x->Vacancy[$i]->ClosingDate;
                  // http://stackoverflow.com/questions/416548/forcing-a-simplexml-object-to-a-string-regardless-of-context
                  $vacancyid = (string) $x->Vacancy[$i]->VacancyID; 
    
    
                    if (!in_array($vacancyid, $stopduplicates)) {  
    
    
    
    
                  echo '
                    <tr class="job-row">
                      <td class="job-cell">'.$job.'</td>
                      <td class="date-cell">'.$closingdate.'</td>
                      <td class="apply-cell">
                        <a href="https://www.octopus-hr.co.uk/recruit/application/apply.aspx?cid=400-73A3BCA1-D952-4BA6-AADB-D8BF3B495DF6&VacancyID='.$vacancyid.'" target="_blank" class="btn btn-teal btn-md btn-job" role="button">Apply Here</a>
                      </td>
                    </tr>';       
                    }
                 $stopduplicates[] = $vacancyid; 
                } //print_r($stopduplicates);
              ?>
    

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 2013-11-02
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      相关资源
      最近更新 更多