SimpleXML和foreach

时间:2016-07-12 15:20:58

标签: php xml-parsing simplexml

我在PHP和XML方面遇到了一些麻烦。如果我需要使用FOREACH从XML源过滤特定参数并且特定块不存在,则结果为空。但我需要展示这样的东西:“没有活跃的服务”。

<?php
$data = '<?xml version="1.0" encoding="utf-8" ?>
<note>
  <to>
    <form>pswA</form>
    <heading>A</heading>
  </to>
  <to>
    <form>pswB</form>
    <heading>A</heading>
  </to>
</note>';

$xml = simplexml_load_string($data);
  foreach ($xml->to as $to){
      if     ($to->form == 'pswA' && $to->heading == 'A'){echo "allow";}
      elseif ($to->form == 'pswA' && $to->heading == 'B'){echo "notallow";}
      elseif ($to->form == 'pswA' && $to->heading == 'C'){echo "block";}
  } // this exist and show (allow / notallow / block)

  foreach ($xml->to as $to){
      if     ($to->form == 'pswC' && $to->heading == 'A'){echo "allow";}
      elseif ($to->form == 'pswC' && $to->heading == 'B'){echo "notallow";}
      elseif ($to->form == 'pswC' && $to->heading == 'C'){echo "block";}
  } // but this is empty... how can I show some echo?
?>

当第二个foreach不存在时,是否可以显示消息?此示例和实时预览中的更多内容:https://3v4l.org/GhdRT

1 个答案:

答案 0 :(得分:2)

使用变量来跟踪您是否找到了有效服务。

$xml = simplexml_load_string($data);
$pswA_found = false;
foreach ($xml->to as $to){
    if     ($to->form == 'pswA' && $to->heading == 'A'){
        echo "allow";
        $pswA_found = true;
    }
    elseif ($to->form == 'pswA' && $to->heading == 'B'){
        echo "notallow";
        $pswA_found = true;
    }
    elseif ($to->form == 'pswA' && $to->heading == 'C'){
        echo "block";
        $pswA_found = true;
    }
}
if (!$pswA_found) {
    echo "No active service for pswA";
}

$pswC_found = false;
foreach ($xml->to as $to){
    if     ($to->form == 'pswC' && $to->heading == 'A'){
        echo "allow";
        $pswC_found = true;
    }
    elseif ($to->form == 'pswC' && $to->heading == 'B'){
        echo "notallow";
        $pswC_found = true;
    }
    elseif ($to->form == 'pswC' && $to->heading == 'C'){
        echo "block";
        $pswC_found = true;
    }
}
if (!$pswC_found) {
    echo "No active service for pswC";
}