• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
A question about XML and PHP

#1
[eluser]Lovecannon[/eluser]
Well I have a question, theres SimpleXML for XML to Object conversion, but is there any libraries for converting a PHP object to XML? I loved that feature in Java, but PHP has always been my love, and Id like to be able to in PHP, is there any pre-made libraries to do this?

#2
[eluser]Michael Wales[/eluser]
http://snipplr.com/view/3491/convert-php...-you-wish/

Designed for arrays but should be easily modified to work with objects.

Code:
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 ($xml == null)
        {
            $xml = simplexml_load_string("&lt;?xml version='1.0' encoding='utf-8'?&gt;<$rootNodeName />");
        }
        
        // loop through the data passed in.
        foreach($data as $key => $value)
        {
            // no numeric keys in our xml please!
            if (is_numeric($key))
            {
                // make string key...
                $key = "unknownNode_". (string) $key;
            }
            
            // replace anything not alpha numeric
            $key = preg_replace('/[^a-z]/i', '', $key);
            
            // if there is another array found recrusively call this function
            if (is_array($value))
            {
                $node = $xml->addChild($key);
                // recrusive call.
                ArrayToXML::toXml($value, $rootNodeName, $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();
    }
}

#3
[eluser]maadmac[/eluser]
@walesmd Hot damn, you're brilliant, you know that?


Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


  Theme © 2014 iAndrew  
Powered By MyBB, © 2002-2021 MyBB Group.