on Feb 9th, 2009Serialisera array till XML

För tillfället sitter jag och skriver en REST-service för en viss tjänst, och var i behov av en klass eller funktion för att serialisera en php-array till XML. Efter lite googlande hade jag dock inte hittat någon simpel klass för att göra detta, förrutom en PEAR-klass. Dock valde jag att inte använda denna då det inte finns stöd för PEAR där tjänsten kommer att hostas. Jag bestämde mig då för att knåpa ihop en egen klass, och detta är resultatet:

Class XmlSerializer Extends XmlWriter
{
    protected $rootnode;
   
    public function __construct($rootnode)
    {
        // Use memory output
        parent::openMemory();
        parent::setIndent(true);
       
        /* Use four spaces as indent */
        parent::setIndentString(chr(0×20) .
                                chr(0×20) .
                                chr(0×20) .
                                chr(0×20)
        );
       
        $this->rootnode = $rootnode;
        parent::startElement($this->rootnode);
    }
   
    public function startElement()
    {
        parent::startElement($this->rootnode);
    }
   
    public function serialize($data)
    {
        foreach($data as $key => $value)
        {
            if(is_array($value))
            {
                parent::startElement($key);
                $this->serialize($value);
                parent::endElement();
               
                continue;
            }
           
            parent::writeElement($key, $value);
        }
    }
   
    // Override function so that we dont need to call endElement by ourselves
    public function output($flush)
    {
        parent::endElement();
        return parent::outputMemory($flush);
    }
}
 

Som ni ser är den välidgt, väldigt simpel, enbart med funktioner för att serialisera en array till php – inte vice versa. Kanske något att bygga in stöd för dock.

Här är ett simpelt exempel:

$data = array(
    ’status’ => ‘Success’,
    ‘data’ => array(
        ‘username’ => ‘Alexander Nyquist’,
        ‘password’ => ‘password’,
        ‘apikey’ => md5(‘password’)
    )
);

$serializer = new XmlSerializer(‘response’);
$serializer->serialize($data);
echo $serializer->output(true);
 

Ovan resulterar i följande XML:

<response>
    <status>Error</status>
    <data>
        <username>Alexander Nyquist</username>
        <password>password</password>
        <apikey>5f4dcc3b5aa765d61d8327deb882cf99</apikey>
    </data>
</response>
 

Tack o hej!

Rekommenderas:
NetAtOnce

3 kommentarer till “Serialisera array till XML”

  1. Emilon 09 Feb 2009 at 10:36:48

    Snyggt som fan. Bra jobbat. :)

  2. Alexander Nyquiston 10 Feb 2009 at 12:40:32

    Emil: Man tackar :)

  3. Anonymon 11 Feb 2009 at 17:29:41

    Jag fattar inte vad den gör och inte hur den fungerar, men jag antar att jag kommer förstå allt om allt efter fredagens föreläsning?

    /Snubben rakt fram

RSS

Lämna en kommentar