這兩天在公司寫和各應用商店應用內搜索的接口,大體就像百度應用內搜索這樣的東西,具體能夠點下面的連接查看。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