Fatal error in this function

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
denonth
Forum Newbie
Posts: 10
Joined: Tue Jan 10, 2012 1:26 pm

Fatal error in this function

Post by denonth »

Hi all.
I am using this class for porting array to XML:

Code: Select all

class ArrayToXML
{
    /**
     * The main function for converting to an XML document.
     * 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 - defaultsto data.
     * @param SimpleXMLElement $xml - should only be used recursively
     * @return string XML
     */
    public static function toXml($data, $rootNodeName = 'data', &$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("");
        }

        // loop through the data passed in.
        foreach($data as $key => $value)
        {
            // if numeric key, assume array of rootNodeName elements
            if (is_numeric($key))
            {
                $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))
            {
                // create a new node unless this is an array of elements
                $node = ArrayToXML::isAssoc($value) ? $xml->addChild($key) : $xml;

                // recrusive call - pass $key as the new rootNodeName
                ArrayToXML::toXml($value, $key, $node);
            }
            else
            {
                // add single node.
                $value = htmlentities($value);
                $xml->addChild($key,$value);
            }

        }
        // pass back as string. or simple xml object if you want!
        return $xml->asXML();
    }

    // determine if a variable is an associative array
    public static function isAssoc( $array ) {
        return (is_array($array) && 0 !== count(array_diff_key($array, array_keys(array_keys($array)))));
    }
}
and I am calling this function with this code sample just to test a bit:

Code: Select all

require_once('test_xml.php');
$library = array(
    'book' => array(
        array(
            'authorFirst' => 'Mark',
            'authorLast' => 'Twain',
            'title' => 'The Innocents Abroad'
        ),
        array(
            'authorFirst' => 'Charles',
            'authorLast' => 'Dickens',
            'title' => 'Oliver Twist'
        )
    )
);
$ArrayToXml=new ArrayToXml();
$ArrayToXml->toXml($library);
And I am getting this error: Fatal error: Call to a member function addChild() on a non-object in on line 42.

Any idea what has went wrong?
Thank you.
User avatar
Celauran
Moderator
Posts: 6427
Joined: Tue Nov 09, 2010 2:39 pm
Location: Montreal, Canada

Re: Fatal error in this function

Post by Celauran »

denonth wrote:Any idea what has went wrong?

Code: Select all

simplexml_load_string("")
returns FALSE.

simplexml_load_string()
denonth
Forum Newbie
Posts: 10
Joined: Tue Jan 10, 2012 1:26 pm

Re: Fatal error in this function

Post by denonth »

Guys can please somone give me a hand in this problem? I know that this error is here because of non value, but I want to be able to make it in xml as I read in this post (I think it is third or fourth post from above. Here is link, please help me: http://snipplr.com/view/3491/

Thank you,
Denonth
User avatar
Celauran
Moderator
Posts: 6427
Joined: Tue Nov 09, 2010 2:39 pm
Location: Montreal, Canada

Re: Fatal error in this function

Post by Celauran »

You've got your answer from that link. Look at your simplexml_load_string() line, then look at his. simplexml_load_string() requires a well-formed XML string as its first parameter. He's giving it one, you're not.
Post Reply