程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP中數組轉換為XML格式

PHP中數組轉換為XML格式

編輯:關於PHP編程

最近公司要做一個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;
	}
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved