1. 程式人生 > >PHP 開發 APP 接口--XML篇

PHP 開發 APP 接口--XML篇

odi write ttr UNC -- elf jpg php 結束

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篇