Home >php教程 >php手册 >PHP中数组转换为XML格式

PHP中数组转换为XML格式

WBOY
WBOYOriginal
2016-06-13 10:58:37767browse

最近公司要做一个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, &#39;root&#39;);
 */

class ArrayToXML {
	//文档对象
	private static $doc = NULL;
	//版本号
	private static $version = &#39;1.0&#39;;
	
	/**
	 * 初始化文档版本及编码
	 * 
	 * @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 = &#39;root&#39;, $version = &#39;1.0&#39;, $encoding = &#39;UTF-8&#39;) {
		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(&#39;item&#39;);
		}
		
		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 ? &#39;true&#39; : &#39;false&#39;);
		} else {
			//如果含有HTML标签,则创建CDATA节点
			if (strpos($value, &#39;<&#39;) > -1) {
				$textNode = self::$doc->createCDATASection($value);
			} else {
				$textNode = self::$doc->createTextNode($value);
			}
		}

		return $textNode;
	}
}

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:php简单浏览目录内容Next article:PHP里的“夏令虫”