php

位置:IT落伍者 >> php >> 浏览文章

PHP中数组转换为XML格式


发布日期:2018年08月15日
 
PHP中数组转换为XML格式

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

}

}

上一篇:从入门到精通---初学PHP 和 MySQL 三

下一篇:如何使用动态共享对象的模式来安装PHP