protected function processGenerate($element, $data)
    {
        $this->prepareElementName($element);

        /** setRootName(null) support */
        if('' === (string) $element)
        {
            $element = array_keys($data)[0];

            return $this->processGenerate($element, $data[$element]);
        }

        /** @var \DOMElement $node */
        $node = $this->getDomDocument()->createElement($element);

        if(is_array($data))
        {
            $this->applyAttributes($data, $node);

            if(isset($data['@value']))
            {
                $this->applyValue($data, $node);

                return $node;
            }
            elseif(isset($data['@cdata']))
            {
                $this->applyCData($data, $node);

                return $node;
            }
            elseif(isset($data['@ns']))
            {
                $this->applyNamespace($data, $node);
            }
        }

        if(is_array($data))
        {
            foreach($data as $key => $value)
            {
                $this->prepareElementName($key);

                if('' === $key || false === $this->isValidElementName($key))
                {
                    continue;
                }

                if(is_array($value) && is_numeric(key($value)))
                {
                    foreach($value as $k => $v)
                    {
                        $node->appendChild($this->processGenerate($key, $v));
                    }
                }
                else
                {
                    $node->appendChild($this->processGenerate($key, $value));
                }

                unset($data[$key]);
            }
        }

        if(!is_array($data))
        {
            $data = $this->getBooleanAsString($data);

            $node->appendChild(
                $this->getDomDocument()->createTextNode($data)
            );
        }

        return $node;
    }
protected function processGenerate($element, $data)
    {
        $this->prepareElementName($element);

        /** setRootName(null) support */
        if('' === (string) $element)
        {
            $element = array_keys($data)[0];

            return $this->processGenerate($element, $data[$element]);
        }

        /** @var \DOMElement $node */
        $node = $this->getDomDocument()->createElement($element);

        if(is_array($data))
        {
            $this->applyAttributes($data, $node);

            if(isset($data['@value']))
            {
                $this->applyValue($data, $node);

                return $node;
            }
            elseif(isset($data['@cdata']))
            {
                $this->applyCData($data, $node);

                return $node;
            }
            elseif(isset($data['@ns']))
            {
                $this->applyNamespace($data, $node);
            }
        }

        if(is_array($data))
        {
            foreach($data as $key => $value)
            {
                $this->prepareElementName($key);

                if('' === $key || false === $this->isValidElementName($key))
                {
                    continue;
                }

                if(is_array($value) && is_numeric(key($value)))
                {
                    foreach($value as $k => $v)
                    {
                        $node->appendChild($this->processGenerate($key, $v));
                    }
                }
                else
                {
                    $node->appendChild($this->processGenerate($key, $value));
                }

                unset($data[$key]);
            }
        }

        if(!is_array($data))
        {
            $data = $this->getBooleanAsString($data);

            $node->appendChild(
                $this->getDomDocument()->createTextNode($data)
            );
        }

        return $node;
    }
protected function processGenerate ( $ element , $ data ) { $ this -> prepareElementName ( $ element ) ; /** setRootName(null) support */ if ( '' === ( string ) $ element ) { $ element = array_keys ( $ data ) [ 0 ] ; return $ this -> processGenerate ( $ element , $ data [ $ element ] ) ; } /** @var \DOMElement $node */ $ node = $ this -> getDomDocument ( ) -> createElement ( $ element ) ; if ( is_array ( $ data ) ) { $ this -> applyAttributes ( $ data , $ node ) ; if ( isset ( $ data [ '@value' ] ) ) { $ this -> applyValue ( $ data , $ node ) ; return $ node ; } elseif ( isset ( $ data [ '@cdata' ] ) ) { $ this -> applyCData ( $ data , $ node ) ; return $ node ; } elseif ( isset ( $ data [ '@ns' ] ) ) { $ this -> applyNamespace ( $ data , $ node ) ; } } if ( is_array ( $ data ) ) { foreach ( $ data as $ key => $ value ) { $ this -> prepareElementName ( $ key ) ; if ( '' === $ key || false === $ this -> isValidElementName ( $ key ) ) { continue ; } if ( is_array ( $ value ) && is_numeric ( key ( $ value ) ) ) { foreach ( $ value as $ k => $ v ) { $ node -> appendChild ( $ this -> processGenerate ( $ key , $ v ) ) ; } } else { $ node -> appendChild ( $ this -> processGenerate ( $ key , $ value ) ) ; } unset ( $ data [ $ key ] ) ; } } if ( ! is_array ( $ data ) ) { $ data = $ this -> getBooleanAsString ( $ data ) ; $ node -> appendChild ( $ this -> getDomDocument ( ) -> createTextNode ( $ data ) ) ; } return $ node ; }
Recursive creation of XML

@param string       $element The child's name
@param string|array $data    Element value

@return \DOMElement

@throws InvalidArgumentException
Recursive creation of XML