Example #1
0
/**
 * @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;
}
Example #2
0
 /** @return string */
 protected function getXmlForReport()
 {
     return df_xml_report($this->e());
 }