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

相关文章
相关标签/搜索