PHP 简单封装返回XML数据接口

如何生成XML?

php 中生成 XML 数据,通常有两种方式:

  1. 拼接字符串:顾名思义,将每段 xml 数据以字符串形式拼接到一起。
  2. 系统类:使用 php 提供的类,domDocument / XMLWriter / SimpleXML。

封装接口

我们使用第一种方式(拼接字符串)来封装 XML数据接口,代码中有详细注释。

<?php

/*
* (PHP简单封装xml数据接口)
* @param integer $code 状态码
* @param string $message 提示信息
* @param array $data 数据
* return xml(string)
*/ 

class Response {
    public static function xml($code, $message = '', $data = []){

        # 判断参数有效性及错误处理
            // code...
        
        # 结果(最终数组)
        $result = [
            "code" => $code,
            "message" => $message,
            "data" => $data
        ];

        # 更改头部(为了更清晰的展示XML节点)
        header('Content-type: text/xml');//xml

        # 生成XML(字符串拼接方式)
        $xml = '<?xml version="1.0" encoding="UTF-8"?>';//xml head
        $xml .= '<root>';//拼接根节点(开始)

        $xml .= self::toXML($result);//调用处理函数

        $xml .= '</root>';//拼接根节点(结束)
        echo $xml;
    }

    # 解析结果数组转为对应的xml节点
    public static function toXML($data){//参数为data(result)

        # 临时存储xml数据
        $xml = $id = '';

        # 遍历并拼接字符串
        foreach($data as $key => $value){

            # 如果key是数字(即非关联数组 => [hello,2,true] )
            # 以 <item id='?'></item> 展示,id为key
            if(is_numeric($key)){//如果是数字
                $id = "id='{$key}'";//将key作为id属性
                $key = 'item ';//将item作为节点名
            }

            $xml .= "<{$key}{$id}>";//开始节点

            # 如果是数组则递归(否则直接返回value值)
            $xml .= is_array($value) ? self::toXML($value) : $value;

            $xml .= "</{$key}>";//结束节点
        }

        return $xml; 
    }
}

# 模拟数据
$data = [
    'id' => 1,
    'name' => '王佳斌',
    'type' => ['A','B','C'],//非关联数组
    'xx' => [//复杂混合数组
        [1,2,3],
        ['a' => 'aa', 'b' => 'bb']
    ]
];

# 调用
Response::xml(200, '返回成功', $data);

?>

结果如下:
在这里插入图片描述

发布了293 篇原创文章 · 获赞 502 · 访问量 95万+

猜你喜欢

转载自blog.csdn.net/weixin_44198965/article/details/105560897