熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP中數組轉換為XML格式

2013-11-15 12:23:14  來源: PHP編程 

  最近公司要做一個API接口輸出格式要有JSON與XML格式 在PHP中輸入JSON直接json_encode就可以但輸出XML沒有提供函數於是決定自己寫一個

  <?php

  /**

  * 數組轉XML類庫

  *

  * @filesource ArrayToXMLphp

  * @author  gentwolf

  * @version //

  *

  * 使用說明

  *  echo ArrayToXml::parse($array root);

  */

  class ArrayToXML {

  //文檔對象

  private static $doc = NULL;

  //版本號

  private static $version = ;

  /**

  * 初始化文檔版本及編碼

  *

  * @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 = $encoding = UTF) {

  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 <) > ) {

  $textNode = self::$doc>createCDATASection($value);

  } else {

  $textNode = self::$doc>createTextNode($value);

  }

  }

  return $textNode;

  }

  }


From:http://tw.wingwit.com/Article/program/PHP/201311/20849.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.