PHP 开发 APP 接口--XML篇

Posted L1230205

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 响应头信息:

 

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>
复制代码

以上是关于PHP 开发 APP 接口--XML篇的主要内容,如果未能解决你的问题,请参考以下文章

PHP 开发 APP 接口 --Redis篇

PHP开发APP接口

PHP开发APP接口

PHP开发APP接口

PHP开发APP接口

app抓包,根据接口开发web端