• PHP 开发 APP 接口--XML篇


    1.PHP 生成 XML 数据

    ① 拼接字符串

    ② 使用系统类(DomDocument,XMLWriter,SimpleXML)

    例1 使用 PHP 系统类中的 DomDocument 类:

    <?php
    $dom = new DomDocument('1.0','utf-8');
    $element = $dom->createElement('test','This is a root element');
    $dom->appendChild($element);
    echo $dom->saveXML();

    页面输出

    This is a root element

    查看源代码显示:

    <?xml version="1.0" encoding="utf-8"?>
    <test>This is a root element</test>

    例2 拼接字符串

    复制代码
    //修改 http 头信息
    header("Content-Type:text/xml");
    //xml头信息
    $xml = "<?xml version='1.0' encoding='utf-8'?>
    ";
    //根节点开始标签
    $xml .= "<root>
    ";
    //code
    $xml .= "<code>200</code>
    ";    
    //message
    $xml .= "<message>数据返回成功</message>
    ";    
    //data
    $xml .= "<data>
    ";    
    $xml .= "<id>1</id>
    ";
    $xml .= "<name>John</name>
    ";
    $xml .= "</data>
    ";
    //根节点结束标签
    $xml .= "</root>";
    
    echo $xml;
    exit();
    复制代码

    页面输出:

    复制代码
    This XML file does not appear to have any style information associated with it. The document tree is shown below.
    <root>
    <code>200</code>
    <message>数据返回成功</message>
    <data>
    <id>1</id>
    <name>John</name>
    </data>
    </root>
    复制代码

    http 响应头信息:

    2.XML 方式封装通信接口

    复制代码
    <?php
    
    class Response{
        /**
        * 按 xml 方式输出通信数据
        * @param integer $code 状态码
        * @param string $message 提示信息
        * @param array $data 数据
        * return string
        */
        public static function xml($code,$message,$data){
    
            if(!is_numeric($code)){
                return '';
            }
    
            $result = array(
                'code' => $code,
                'message' => $message,
                'data' => $data
            );
    
            //修改 http 头信息
            header("Content-Type:text/xml");
            //xml头信息
            $xml = "<?xml version='1.0' encoding='utf-8'?>";
            //根节点开始标签
            $xml .= "<root>";
    
            $xml .= self::xmlToEncode($result);
    
            //根节点结束标签
            $xml .= "</root>";
    
            echo $xml;
            exit();
        }
    
        //解析$result至xml
        public static function xmlToEncode($data){
            $xml = $attr = "";
            foreach($data as $k=>$v){
                //如果$k是数字(data(code,message,data中的data)数据里面还含有索引数组),要进行如下判断
                if(is_numeric($k)){
                    $attr = "id='{$k}'";
                    $k = 'item ';
                }
    
                $xml .= "<{$k} {$attr}>";
                //如果$v是数组,则递归调用该方法
                if(is_array($v)){
                    $xml .= self::xmlToEncode($v);
                }else{
                    $xml .= $v;
                }
                $xml .= "</{$k}>";
            }
    
            return $xml;
        }
    }
    复制代码

    调用该页面 test.php

    $data 第一种情况:

    复制代码
    <?php
    require 'response.php';
    
    $data = array(
        'id'=>1,
        'name'=>'Mary'
    );
    Response::xml(200,'数据返回成功',$data);
    复制代码

    页面输出:

    复制代码
    This XML file does not appear to have any style information associated with it. The document tree is shown below.
    <root>
    <code>200</code>
    <message>数据返回成功</message>
    <data>
    <id>1</id>
    <name>Mary</name>
    </data>
    </root>
    复制代码

    $data 第二种情况

    复制代码
    <?php
    require 'response.php';
    
    $data = array(
        'id'=>1,
        'name'=>'Mary',
        'type'=>array(1,3,6) //<0>1</0><1>3</1><2>6</2>  => <item id="0">1</item>...
    );
    
    Response::xml(200,'数据返回成功',$data);
    复制代码

    页面输出:

    复制代码
    This XML file does not appear to have any style information associated with it. The document tree is shown below.
    <root>
    <code>200</code>
    <message>数据返回成功</message>
    <data>
    <id>1</id>
    <name>Mary</name>
    <type>
    <item id="0">1</item>
    <item id="1">3</item>
    <item id="2">6</item>
    </type>
    </data>
    </root>
    复制代码

    $data 第三中情况:

    复制代码
    <?php
    require 'response.php';
    
    $data = array(
        'id'=>1,
        'name'=>'Mary',
        'type'=>array('a'=>1,'b'=>3,'c'=>6)
    );
    Response::xml(200,'数据返回成功',$data);
    复制代码

    页面输出:

    复制代码
    This XML file does not appear to have any style information associated with it. The document tree is shown below.
    <root>
    <code>200</code>
    <message>数据返回成功</message>
    <data>
    <id>1</id>
    <name>Mary</name>
    <type>
    <a>1</a>
    <b>3</b>
    <c>6</c>
    </type>
    </data>
    </root>
    复制代码
  • 相关阅读:
    HDU1029 Ignatius and the Princess IV
    UVA11039 Building designing【排序】
    UVA11039 Building designing【排序】
    POJ3278 HDU2717 Catch That Cow
    POJ3278 HDU2717 Catch That Cow
    POJ1338 Ugly Numbers(解法二)
    POJ1338 Ugly Numbers(解法二)
    UVA532 Dungeon Master
    UVA532 Dungeon Master
    POJ1915 Knight Moves
  • 原文地址:https://www.cnblogs.com/lxj0205/p/9983104.html
Copyright © 2020-2023  润新知