• PHP中数组转换为XML格式


    最近公司要做一个API接口,输出格式要有JSON与XML格式, 在PHP中,输入JSON直接json_encode就可以,但输出XML没有提供函数,于是决定自己写一个。
    <?php
    
    /**
     * 数组转XML类库
     *  
     * @filesource ArrayToXML.php
     * @author	gentwolf
     * @version	1.0	2013/08/23
     *
     * 使用说明:
     * 	echo ArrayToXml::parse($array, 'root');
     */
    
    class ArrayToXML {
    	//文档对象
    	private static $doc = NULL;
    	//版本号
    	private static $version = '1.0';
    	
    	/**
    	 * 初始化文档版本及编码
    	 * 
    	 * @param string $version	版本号
    	 * @param string $encoding	XML编码
    	 */
    	public static function init($version, $encoding) {
    		self::$doc = new DomDocument($version, $encoding);
            self::$doc->formatOutput = true;
    	}
    	
    	/**
    	 * 转换数组到XML
    	 * 
    	 * @param array $array		要转换的数组
    	 * @param string $rootName	要节点名称
    	 * @param string $version	版本号
    	 * @param string $encoding	XML编码
    	 * 
    	 * @return string
    	 */
    	public static function parse($array, $rootName = 'root', $version = '1.0', $encoding = 'UTF-8') {
    		self::init($version, $encoding);
    		
    		//转换
    		$node = self::convert($array, $rootName);
    		self::$doc->appendChild($node);
    
    		return self::$doc->saveXML();
    	}
    	
    	/**
    	 * 递归转换
    	 * 
    	 * @param array $array		数组
    	 * @param string $nodeName	节点名称
    	 * 
    	 * @return object (DOMElement)
    	 */
    	private static function convert($array, $nodeName) {
    		if (!is_array($array)) return false;
    		
    		//创建父节点
    		$node = self::createNode($nodeName);
    		
    		//循环数组
    		foreach ($array as $key => $value) {
    			$element = self::createNode($key);
    			
    			//如果不是数组,则创建节点的值
    			if (!is_array($value)) {
    				$element->appendChild(self::createValue($value));
    				$node->appendChild($element);
    			} else {
    				//如果是数组,则递归
    				$node->appendChild(self::convert($value, $key, $element));
    			}						
    		}
    		return $node;
    	}
    	
    	private static function createNode($name) {
    		$node = NULL;
    		
    		//如果是字符串,则创建节点
    		if (!is_numeric($name)) {
    			$node = self::$doc->createElement($name);
    		} else {
    			//如果是数字,则创建默认item节点
    			$node = self::$doc->createElement('item');
    		}
    		
    		return $node;
    	}
    	
    	/**
    	 * 创建文本节点
    	 * 
    	 * @param string || bool || integer $value
    	 * 
    	 * @return object (DOMText || DOMCDATASection );
    	 */
    	private static function createValue($value) {
    		$textNode = NULL;
    		
    		//如果是bool型,则转换为字符串
    		if (true === $value || false === $value) {
    			$textNode = self::$doc->createTextNode($value ? 'true' : 'false');
    		} else {
    			//如果含有HTML标签,则创建CDATA节点
    			if (strpos($value, '<') > -1) {
    				$textNode = self::$doc->createCDATASection($value);
    			} else {
    				$textNode = self::$doc->createTextNode($value);
    			}
    		}
    
    		return $textNode;
    	}
    }


  • 相关阅读:
    cocos2d-x 坐标系
    Linux 用户和用户组
    Linux 挂载分区 + swap 分区
    Linux 分区 磁盘分区与格式化
    Linux MBR分区(重点知识)
    Linux -磁盘管理 ip http://blog.csdn.net/xh16319/article/details/17272455
    Linux 底行模式常用命令
    Linux Bash 通配符
    Linux Bash 的基本功能 管道符
    Linux Bash的基本功能 输出重定向
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3278406.html
Copyright © 2020-2023  润新知