php 数组转换为xml数据,已针对数组键值为数字进行处理
2015-04-23 11:06
453 查看
代码非原创,有修改。
<?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 节点名称 * @param obj $pareNode 上一级节点 * * @return object (DOMElement) */ private static function convert($array, $nodeName, $pareNode = NULL) { if (!is_array($array)) return false; //创建父节点。数组键值为数字时,不创建父节点,父节点为上一级节点 if(is_numeric($nodeName)){ $node = $pareNode; }else{ $node = self::createNode($nodeName); } //循环数组 foreach ($array as $key => $value) { if(is_numeric($key)){ //键值为数字,创建节点。 //不以数字做节点,以上一级数组键值做节点。将上一级节点当作当前节点进行操作 $node = self::createNode($nodeName); if (!is_array($value)) { //不是数组,则创建节点的值。 $node->appendChild(self::createValue($value)); $pareNode->appendChild($node); } else { //如果是数组,则递归。 $pareNode->appendChild(self::convert($value, $key, $node)); } }else{ $element = self::createNode($key); //如果不是数组,则创建节点的值 if (!is_array($value)) { $element->appendChild(self::createValue($value)); $node->appendChild($element); } else { //如果是数组,则递归 $node->appendChild(self::convert($value, $key, $node)); } } } return $node; } private static function createNode($name) { $node = NULL; $name = strtoupper($name); //如果是字符串,则创建节点 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->createCDATASection($value ? 'true' : 'false'); } else { //创建CDATA节点 $textNode = self::$doc->createCDATASection($value); /* //如果含有HTML标签,则创建CDATA节点 if (strpos($value, '<') > -1) { $textNode = self::$doc->createCDATASection($value); } else { $textNode = self::$doc->createTextNode($value); }*/ } return $textNode; } } ?>
相关文章推荐
- PHP实现XML与数据格式进行转换类实例
- Ajax 如何通过url 传递Json 数据或者数组 给PHP进行处理
- php多维数组的去重(针对任意的键值进行去重)--二维数组的唯一--时间复杂度~O(n)
- 如何用Google APIs和Google的应用系统进行集成(7)----在把JSON转换成XML数据过程中,JSON数据中包含违背XML数据规范:XML节点名不支持数字的Java解决方案
- PHP处理数组和XML之间的互相转换
- PHP实现XML与数据格式进行转换类实例
- php吧字符串直接转换成数组处理
- 处理:SqlServer FOR XML 无法对节点 'NoName' 的数据进行序列化,因为它包含在 XML 中不允许出现的字符(0x0000)。
- 字符串内特殊字符在html_javascript_xml等内使用时的转换 ,"缺少十六进制数字"错误的处理
- php 将print_r处理后的数据还原为原始数组的方法
- 处理微信支付返回的数据,公众号支付xml转array数组
- php xml 转换数组
- 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定
- 通过XML数据进行异步提交并对XML数据进行处理
- php中实现xml与mysql数据相互转换的方法
- PHP将XML数据转成数组 例子详细介绍
- PHP处理数组要删除/要添加的数据
- php小工具类php下将XML转换为数组
- Vue实现表格中对数据进行转换、处理的方法
- PHP XML和数组互相转换