首页 > 开发 > PHP > 正文

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

2024-05-04 22:51:15
字体:
来源:转载
供稿:网友

本文实例讲述了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:

<?phprequire_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;?>            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表