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'?>\n";

//根节点开始标签

$xml .= "<root>\n";

//code

$xml .= "<code>200</code>\n";    

//message

$xml .= "<message>数据返回成功</message>\n";    

//data

$xml .= "<data>\n";    

$xml .= "<id>1</id>\n";

$xml .= "<name>John</name>\n";

$xml .= "</data>\n";

//根节点结束标签

$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 响应头信息:

PHP 开发 APP 接口 学习笔记与总结 - XML 方式封装通信接口

 

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>

 

你可能感兴趣的:(学习笔记)