• PHP自定义XML类实现数组到XML文件的转换


    这两天在公司写和各应用商店应用内搜索的接口,大致就像百度应用内搜索这样的东西,具体可以点下面的链接查看。

    百度应用内搜索

    有的应用商店需要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>
    ";
                    $xmlString .= self::arrayToXMLString($value);
                    $xmlString .= "</$key>
    ";
                } else {
                    $xmlString .= "<$key>";
                    $xmlString .= "$value";
                    $xmlString .= "</$key>
    ";
                }
            }
    
            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主页上,有兴趣的可以去查看。

    xml.class.php

  • 相关阅读:
    [标签] action的使用
    [sql server]sql server 查询所在port
    Freemarker中通过request获得contextPath
    Spring Cp30配置
    [Git]Git远程仓库
    kill tomcat process in window
    离线安装maven
    离线安装maven,重新打开eclipse报错处理方法
    [Git]Git安装
    树莓派魔镜的制作
  • 原文地址:https://www.cnblogs.com/zhouxuchen/p/4929034.html
Copyright © 2020-2023  润新知