php遍历xml 数组,PHP数组生成XML格式数据的封装类实例

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

类库代码:MakeXML.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.='

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:

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程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值