PHP自定義XML類實現數組到XML文件的轉換

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

相關文章
相關標籤/搜索