php配列からXMLを作成する

6265 ワード

クラスライブラリコード:MakeXML.php:
<?php

/**

* MakeXML

* 
*/



/*

*      XML  

*/

class Fwcms_MakeXML 

{

    private static $instance;

        

    private function __construct(){}



    /**

     *         

     *

     * @return     

     */

    public static function getInstance() {

        if (!isset(self::$instance)) {

            self::$instance = new Fwcms_MakeXML();

        }

        return self::$instance;

    }

     

    /**

     *   XML  

     * @param $array     XML   ,           ,          XML   

     * @param $xslName XSL   ( :"http://www.xxx.com/templates/normal/xslname.xsl")

     * @return $XMLString   XML   

     */

    public function getXML($array,$xslName=""){

        $XMLString = '<?xml version="1.0" encoding="utf-8"?>';

        if($xslName!="")

            $XMLString.='<?xml-stylesheet type="text/xsl" href="'.$xslName.'"?>';

        $XMLString.=$this->make($array);

        return $XMLString;

    }

    

    /*

     *     XML  

     */

    private function make($array)

    {

        $XMLString='';

        $haveRightBracket=FALSE;



        if(isset($array['elementName'])){

            $elementName=array_shift($array);//         XML   

        }else{

            $elementName='item';//           item

        }

        $XMLString.='<'.$elementName.' ';

        if(is_array($array)){

        foreach($array as $paramKey=>$nodeParam){

                if(!is_array($nodeParam)){

                    //          ,        

                    $XMLString.=$paramKey.'="'.$nodeParam.'" ';

                }else{

                    if(!$haveRightBracket){

                        $XMLString.='>';

                        $haveRightBracket=TRUE;

                    }

                    //       ,     

                    $XMLString.=$this->make($nodeParam);

                }

            }

        }

        if(!$haveRightBracket){

            $XMLString.='>';

            $haveRightBracket=TRUE;

        }        

        $XMLString.='</'.$elementName.'>';//       

        return $XMLString;

    }

    

    /**

     *         

     * @param $fileName    

     * @param $XMLString      XML  

     */

    public function saveToFile($fileName,$XMLString)

    {

        if(!$handle=fopen($fileName,'w'))

        {

            return FALSE;

        }

        if(!fwrite($handle,$XMLString))

        {

            return FALSE;

        }

        return TRUE;

    }

    

    /**

     *         XML  

     */

    public function write($fileName,$array,$xslName=''){

        $XMLString=$this->getXML($array,$xslName);

        $result=$this->saveToFile($fileName,$XMLString);

        return $result;

    }

}

テストコードtestXML.php:
<?php

require_once 'MakeXML.php';

$xml=Fwcms_MakeXML::getInstance();

//$xml=new Fwcms_MakeXML();

$array=array(

        'elementName'=>'data',//XML   ,        ITEM

        'test1'=>array(

            //       

            //'elementName'=>'item1',

            'id'=>1,

            'title'=>'try1'

        ),

        'test2'=>array(

            'elementName'=>'item2',

            'id'=>2,//  

            'title'=>'try2',//  

            'test2.2'=>array(

                //XML   ,          ,         

                'elementName'=>'item2.2',

                'id'=>2.2,

                'title'=>'try2.2'

            )

        ),

        'test3'=>array(

            'elementName'=>'item3',

            'id'=>3,

            'title'=>'try3'

        ),

        'test4'=>array(

            'elementName'=>'item4',

            'id'=>4,

            'title'=>'try4'

        ),

        'test5'=>array(

            //       

            //'elementName'=>'item5',

            'id'=>5,

            'title'=>'try5'

        )

    );

$string=$xml->getXML($array);//     XML  

$xml->saveToFile('test.xml',$string);//    XML       

$xml->write('test2.xml',$array,'test2.xsl');//              

header ("content-type: text/xml");

echo $string;

?>