/** * @param CX $e * @param string $name * @param bool $required [optional] * @return CX|null * @throws E */ function df_xml_children(CX $e, $name, $required = false) { df_param_string_not_empty($name, 0); /** @var CX|null $result */ if (df_xml_exists_child($e, $name)) { /** * Обратите внимание, что если мы имеем структуру: <dictionary> <rule/> <rule/> <rule/> </dictionary> * то $e->{'rule'} вернёт не массив, а объект (!), * но при этом @see count() для этого объекта работает как для массива (!), * то есть реально возвращает количество детей типа rule. * Далее, оператор [] также работает, как для массива (!) * http://stackoverflow.com/a/16100099 * Класс \SimpleXMLElement — вообще один из самых необычных классов PHP. */ $result = $e->{$name}; } else { if (!$required) { $result = null; } else { df_error("Требуемый узел «{$name}» отсутствует в документе:\n{xml}", ['{xml}' => df_xml_report($e)]); } } return $result; }
/** @return string */ protected function getXmlForReport() { return df_xml_report($this->e()); }