Search code examples
phpxmlreader

How to catch if xmlReader property value is empty?


How can I catch if the property value is empty in xmlReader class? i have tried $reader->value == '' and empty($reader->value) but it doesn't worked.

This is how look my code:

  while ($reader->read()) {
        if($reader->nodeType == XMLReader::ELEMENT) { 
          $name = $reader->name;
        }

    if($reader->nodeType == XMLReader::TEXT || $reader->nodeType == XMLReader::CDATA){
      switch ($name) {

          case 'zdjecie':

              if (empty($reader->value) || !isset($reader->value)) {
                $zdj = explode('\\',$reader->value);
                $zdjName = end($zdj);
              }else{
                $zdjName = 'no_photo';
              }
            break;
        }
    }

    if($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == 'produkt'){

      $reader->next();
      $i++;
    }
  }

Solution

  • Use XMLReader::getAttribute() for reading an attribute; the docs does not mention you can use the properties to access attributes.

    Looking your code, empty($reader->value) || !isset($reader->value) is redundant. isset will only check against null, while empty will return true on empty strings too (as value is always defined on XMLReader).

    You can use empty($reader->value) or !$reader->value as condition, but you switched the cases.

    if (empty($reader->value)) { // or simply: !$reader->value
        $zdjName = 'no_photo';
    } else {
        $zdj = explode('\\',$reader->value);
        $zdjName = end($zdj);
    }
    

    + Hint: You should be aware, that in XML, white-spaces considered to be part of the node's value.