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);

?>

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王佳斌

请作者喝杯咖啡 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值