PHP数组生成XML格式数据的封装类实例

888次阅读  |  发布于5年以前

本文实例讲述了PHP数组生成XML格式数据的封装类。分享给大家供大家参考,具体如下:

类库代码:MakeXML.php:


    <?php
    /**
    * MakeXML
    *
    * @author Lin Jiong(slime09@gmail.com)
    * @version v1.0
    * @license Copyright (c) 2009 Lin Jiong (www.cn09.com)
    * The LGPL (http://www.gnu.org/licenses/lgpl.html) licenses.
    */
    /*
    * 从数组生成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;
    ?>

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP针对XML文件操作技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP错误与异常处理方法总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8