PHP自定义XML类实现数组到XML文件的转换
2015-11-01 23:44
751 查看
这两天在公司写和各应用商店应用内搜索的接口,大致就像百度应用内搜索这样的东西,具体可以点下面的链接查看。
有的应用商店需要JSON格式的数据,所以我只需要用下面的语句就可以返回对方服务器需要的数据。
然而遇到像百度这种需要XML格式的就比较蛋疼了,php的确在标准库里提供了生成XML文件的方法。可能是因为这部分的中文文档还没有,并不能百度到详尽的介绍(笑),因此花点时间自己写一个XML类封装几个可能用得到的方法。
我使用的是php标准库里的simpleXMLElement拓展,原因是这个拓展相比于DOMDocument更加轻量,使用方便,适合于我这样的懒鬼(划掉)。
将数组转换为xml格式的文件需要用到递归,但是并不复杂,具体看代码。
另外我写了一个Demo,直接粘贴在上面代码的后部就可以运行了。
我将代码放在了我的GitOSC主页上,有兴趣的可以去查看。
有的应用商店需要JSON格式的数据,所以我只需要用下面的语句就可以返回对方服务器需要的数据。
echo json_encode($array);
然而遇到像百度这种需要XML格式的就比较蛋疼了,php的确在标准库里提供了生成XML文件的方法。可能是因为这部分的中文文档还没有,并不能百度到详尽的介绍(笑),因此花点时间自己写一个XML类封装几个可能用得到的方法。
我使用的是php标准库里的simpleXMLElement拓展,原因是这个拓展相比于DOMDocument更加轻量,使用方便,适合于我这样的懒鬼(划掉)。
将数组转换为xml格式的文件需要用到递归,但是并不复杂,具体看代码。
<?php /** * 自定义XML类 * XML::arrayToXMLString : 将数组转换为XML格式的字符串 * XML::writeAsXML : 使用SimpleXMLElement输出XML文件 * * @author zhouxuchen1993@foxmail.com */ class XML { /** * 将数组转换为XML格式的字符串 * @param Array $array : 待转换的数组 * @return String $xmlString : XML格式的字符串 */ public static function arrayToXMLString ($array) { $xmlString = ""; foreach ($array as $key => $value) { if (is_array($value)) { $xmlString .= "<$key>\n"; $xmlString .= self::arrayToXMLString($value); $xmlString .= "</$key>\n"; } else { $xmlString .= "<$key>"; $xmlString .= "$value"; $xmlString .= "</$key>\n"; } } return $xmlString; } /** * 使用SimpleXMLElement输出XML文件 * @param String $xmlString : XML格式的字符串 * @param String $filename : 输出的文件名,留空则不写入文件 * @param String $filepath : 输出的文件路径,留空则写入当前目录 * @return boolean $flag : simpleXMLElement转换是否成功标志 */ public static function writeAsXML($xmlString, $filename='', $filepath='') { $simpleXML = new simpleXMLElement($xmlString); if ($filename != '') { $filename = empty($filepath) ? $filename : $filepath.'/'.$filename; $flag = $simpleXML->asXML($filename); } else { $flag = $simpleXML->asXML(); } return $flag; } }
另外我写了一个Demo,直接粘贴在上面代码的后部就可以运行了。
<?php /** * Demo * @author zhouxuchen1993@foxmail.com */ $array = array(); $array['urlset'] = array( 'url' => array( 'loc' => 'http://baidu.com', 'lastmod' => '2014-09-06', 'data' => array( 'display' => array( 'innerID' => 1, 'sourceTime' => time(), 'title' => '<![CDATA[上海招聘]]>', 'displayInfo1' => array( 'key1' => 'key1', 'value1' => 'value1' ), 'displayInfo2' => array( 'key1' => 'key1', 'value1' => 'value1' ), ), ), ), ); $xmlString = XML::arrayToXMLString($array); $xmlString = '<?xml version="1.0" encoding="utf-8"?>'.$xmlString; $flag = XML::writeAsXML($xmlString, 'test.xml'); var_dump($flag);
我将代码放在了我的GitOSC主页上,有兴趣的可以去查看。
相关文章推荐
- PHP从数据库中取得数据并放入数组(PDO)
- 转换流InputStreamReader、OutputStreamWriter
- php中的一些不常见的问题foreach/in_array[开发篇]
- 如何对PHP文件进行加密——ZendGuard加密与ZendLoader解密
- php函数fgets读取文件
- PHP中的错误处理&自定义错误处理方法
- Thinkphp列表搜索排序-----查
- leetcode-01 twoSum php实现
- PHP mysql 事务处理实例
- Thinkphp增加操作(Controller到模型Model的逻辑)
- php中对MYSQL操作之事务控制,回滚
- php mysql事务处理回滚操作
- FTP上传助手1.1 [免费版]
- PHP之闭包详解
- php面向对象(二)
- php面向对象(一)
- PHP实现QQ快速登录
- laravel中ubuntu下执行php artisan migrate总是报错
- php实战之使用递归读取商品无限分类
- vsftpd说明,有用,转了