这两天在公司写和各应用商店应用内搜索的接口,大体就像百度应用内搜索这样的东西,具体能够点下面的连接查看。php
百度应用内搜索git
有的应用商店须要JSON格式的数据,因此我只须要用下面的语句就能够返回对方服务器须要的数据。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,直接粘贴在上面代码的后部就能够运行了。app
<?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主页上,有兴趣的能够去查看。url
xml.class.php.net