src/Arrays.php
public function toXML($data, $rootNodeName = 'ResultSet', &$xml = null)
    {
        // turn off compatibility mode as simple xml throws a wobbly if you don't.
        if (ini_get('zend.ze1_compatibility_mode') == 1) {
            ini_set('zend.ze1_compatibility_mode', 0);
        }

        if (is_null($xml)) {
            $xml = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$rootNodeName />");
        }

        // loop through the data passed in.
        foreach ($data as $key => $value) {
            // no numeric keys in our xml please!
            if (is_numeric($key)) {
                $numeric = 1;
                $key = $rootNodeName;
            }

            // delete any char not allowed in XML element names
            $key = preg_replace('/[^a-z0-9\-\_\.\:]/i', '', $key);

            // if there is another array found recrusively call this function
            if (is_array($value)) {
                $node = $this->isAssoc($value) || $numeric ? $xml->addChild($key) : $xml;

                // recursive call
                if ($numeric) {
                    $key = 'anon';
                }
                $this->toXML($value, $key, $node);
            } else {
                // add single node.
                $value = htmlentities($value);
//                $xml->addChild($key, $value);
                $xml->addAttribute($key, $value);
            }
        }

        // pass back as XML
        // return $xml->asXML();
        // if you want the XML to be formatted, use the below instead to return the XML
        $doc = new DOMDocument('1.0');
        $doc->preserveWhiteSpace = false;
        $doc->loadXML($xml->asXML());
        $doc->formatOutput = true;
        return $doc->saveXML();
    }
public function toXML($data, $rootNodeName = 'ResultSet', &$xml = null)
    {
        // turn off compatibility mode as simple xml throws a wobbly if you don't.
        if (ini_get('zend.ze1_compatibility_mode') == 1) {
            ini_set('zend.ze1_compatibility_mode', 0);
        }

        if (is_null($xml)) {
            $xml = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$rootNodeName />");
        }

        // loop through the data passed in.
        foreach ($data as $key => $value) {
            // no numeric keys in our xml please!
            if (is_numeric($key)) {
                $numeric = 1;
                $key = $rootNodeName;
            }

            // delete any char not allowed in XML element names
            $key = preg_replace('/[^a-z0-9\-\_\.\:]/i', '', $key);

            // if there is another array found recrusively call this function
            if (is_array($value)) {
                $node = $this->isAssoc($value) || $numeric ? $xml->addChild($key) : $xml;

                // recursive call
                if ($numeric) {
                    $key = 'anon';
                }
                $this->toXML($value, $key, $node);
            } else {
                // add single node.
                $value = htmlentities($value);
//                $xml->addChild($key, $value);
                $xml->addAttribute($key, $value);
            }
        }

        // pass back as XML
        // return $xml->asXML();
        // if you want the XML to be formatted, use the below instead to return the XML
        $doc = new DOMDocument('1.0');
        $doc->preserveWhiteSpace = false;
        $doc->loadXML($xml->asXML());
        $doc->formatOutput = true;
        return $doc->saveXML();
    }
public function toXML ( $ data , $ rootNodeName = 'ResultSet' , & $ xml = null ) { // turn off compatibility mode as simple xml throws a wobbly if you don't. if ( ini_get ( 'zend.ze1_compatibility_mode' ) == 1 ) { ini_set ( 'zend.ze1_compatibility_mode' , 0 ) ; } if ( is_null ( $ xml ) ) { $ xml = simplexml_load_string ( "<?xml version='1.0' encoding='utf-8'?><$rootNodeName />" ) ; } // loop through the data passed in. foreach ( $ data as $ key => $ value ) { // no numeric keys in our xml please! if ( is_numeric ( $ key ) ) { $ numeric = 1 ; $ key = $ rootNodeName ; } // delete any char not allowed in XML element names $ key = preg_replace ( '/[^a-z0-9\-\_\.\:]/i' , '' , $ key ) ; // if there is another array found recrusively call this function if ( is_array ( $ value ) ) { $ node = $ this -> isAssoc ( $ value ) || $ numeric ? $ xml -> addChild ( $ key ) : $ xml ; // recursive call if ( $ numeric ) { $ key = 'anon' ; } $ this -> toXML ( $ value , $ key , $ node ) ; } else { // add single node. $ value = htmlentities ( $ value ) ; //                $xml->addChild($key, $value); $ xml -> addAttribute ( $ key , $ value ) ; } } // pass back as XML // return $xml->asXML(); // if you want the XML to be formatted, use the below instead to return the XML $ doc = new DOMDocument ( '1.0' ) ; $ doc -> preserveWhiteSpace = false ; $ doc -> loadXML ( $ xml -> asXML ( ) ) ; $ doc -> formatOutput = true ; return $ doc -> saveXML ( ) ; }
Pass in a multi dimensional array and this recrusively loops through and builds up an XML document.

@param array $data
@param string $rootNodeName - what you want the root node to be - defaults to data
@param SimpleXMLElement $xml - should only be used recursively
@return string XML
Pass in a multi dimensional array and this recrusively loops through and builds up an XML document .