drls2738 2016-11-10 09:36
浏览 670
已采纳

SimpleXMLElement中的变量变量

I have 'simple' problem :-)

I'm reading large XML file using this:

$node = new SimpleXMLElement($reader->readOuterXML());

$node have elements severity, class... I can compare them like this:

if($node->severity==WARNING){

Or show them like this:

echo $node->severity;

What I want to prepare if statements in advance reading posts variables like this:

if(isset($_POST['Severity']) && !EMPTY($_POST['Severity'])){
  $Severity[]=$_POST['Severity'];
  foreach($Severity as $Severityval){
   foreach($Severityval as $Severityvalues){
    $searchquery .= '($node->Severity==' .$Severityvalues. ') || ';
   }
  }
}

Then I want to use $searchquery inside XML reader:

if($searchquery){
 echo $node->severity;
}

But, this always return true and everything is shown :-(

My variable is properly created, if I echo it shows ($node->Severity==WARNING)

Maybe screen shot can explain my problem:

enter image description here

Thanks in advance

  • 写回答

1条回答 默认 最新

  • doufuxi7093 2016-11-10 10:18
    关注

    Try this :

    if(isset($_POST['Severity']) && !EMPTY($_POST['Severity'])) {
    
      $Severity[] = $_POST['Severity'];
    
      $i = 0; 
    
      foreach($Severity as $Severityval) 
      {
        foreach($Severityval as $Severityvalues) 
        {
          if ($node->Severity == $Severityvalues) {
            $i++;
          }
        }
      }
    
      if ($i > 0) {
        echo $node->severity;
      }
    }
    

    EDIT : I understand fully the problematic, if you had loaded one per one XML, you can do that (for each selected on node value - example work for severity, it's a good sample) :

    $root_node = $your_var;
    
    if(isset($_POST['Severity']) && strlen(trim($_POST['Severity'])) > 0) {
    
      $severities_selected = array_values($_POST['Severity']);
      $severity = (string) $root_node->severity;
    
      if (in_array($severity, $severities_selected)) {
        echo "This XML contains one selected severity (".$severity.")";
      }
    }
    

    Hope this helps !!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?