MiTja
MiTja

Reputation: 61

Variable variables in 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

Upvotes: 0

Views: 77

Answers (1)

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 !!

Upvotes: 1

Related Questions