Не могу понять, как определить, пуст ли узел SimpleXML - PullRequest
3 голосов
/ 01 ноября 2010

Итак, у меня есть этот код:

foreach ($xml->PrintQuestion as $PrintQuestion) {

     //if hint doesn't exist, store question id
     if (!$PrintQuestion->content->multichoice->feedback->hint->Passage) {

         fwrite($fp, "<contentid filename=\"$value\">" . $PrintQuestion->attributes()->id . "</contentid>");

     }

}

По сути, я пытаюсь сохранить идентификаторы в файл XML, если существует узел Passage, но кажется, что он хранит каждый идентификатор, независимо от того, существуют ли узлы.в пределах Passage или нет.

Ответы [ 2 ]

7 голосов
/ 01 ноября 2010

Что произойдет, если вы используете empty()

if( empty($PrintQuestion->content->multichoice->feedback->hint->Passage) ) {

    fwrite($fp, "<contentid filename=\"$value\">" . $PrintQuestion->attributes()->id . "</contentid>");      

}
4 голосов
/ 14 ноября 2013

Вы можете привести значение в виде строки и сравнить с пустой строкой (вроде как проверить значение объекта simplexml ):

$value = $root->child;

if ((string)$value === '') {
  echo 'This passes if the child element existed, but was empty';
}
...