这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
这篇文章主要介绍了 PHP 数组生成 XML 格式数据的封装类, 结合完整实例形式分析了 php 针对数组的递归遍历与 XML 格式数据转换的相关操作技巧, 需要的朋友可以参考下
本文实例讲述了 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 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0803/341340.html