PHP封装xml数据通信接口

PHP 生成XML数据
1)组装字符串 :简单,容易理解,常用
2)使用系统类
如:
 DomDocument
 
下面详细说明 组装字符串 生成XML数据
xml数据需要1.头信息<?xml
           2.根节点
           3.数据
<?php 
 class Response{
/**
*按json方式输出通信数据
*@param integer $code 状态码
*@param string $message 提示信息
*@param array $data 数据
*return string 返回值为json
*/
//静态方法,构造json数据
 
   public static function xml(){
  $xml="<?xml version=‘1.0‘ encoding=‘UTF-8‘?>";
  $xml.="<root>";//用点好和前面的字符串链接,这个是根节点
  $xml.="<code>200</code>";
  $xml.="<message>数据返回成功</message>";
  $xml.="<data>";
  $xml.="<id>1</id>";
  $xml.="<name>david</name>";
  $xml.="</data>";
  $xml.="</root>";


  echo $xml;


   }
}
Response::xml();
?>


运行网页显示:
200数据返回成功1david
查看源代码:
<?xml version=‘1.0‘ encoding=‘UTF-8‘?><root><code>200</code><message>


数据返回成功


</message><data><id>1</id><name>david</name></data></root>


浏览器中查看源码时数据紧靠在一起,不直观。所以每个数据输出后换行。


 $xml="<?xml version=‘1.0‘ encoding=‘UTF-8‘?>\n";
  $xml.="<root>\n";//用点好和前面的字符串链接,这个是根节点
  $xml.="<code>200</code>\n";
  $xml.="<message>数据返回成功</message>\n";
  $xml.="<data>\n";
  $xml.="<id>1</id>\n";
  $xml.="<name>david</name>\n";
  $xml.="</data>\n";
  $xml.="</root>\n";


修改后:
<?xml version=‘1.0‘ encoding=‘UTF-8‘?>
<root>
<code>200</code>
<message>数据返回成功</message>
<data>
<id>1</id>
<name>david</name>
</data>
</root>




默认情况下:xml标签不会在浏览器页面中显示,只会在查看源代码时显示
因为默认情况下http响应头信息是html类型。默认: header("Content-


Type:text/html");
1.png


如果需要在页面上显示xml标签,就需要修改响应头信息中content type为 


text/xml
public static function xml(){
  header("Content-Type:text/xml");
  $xml="<?xml version=‘1.0‘ encoding=‘UTF-8‘?>\n";
  $xml.="<root>\n";//用点好和前面的字符串链接,这个是根节点
  $xml.="<code>200</code>\n";
  $xml.="<message>数据返回成功</message>\n";
  $xml.="<data>\n";
  $xml.="<id>1</id>\n";
  $xml.="<name>david</name>\n";
  $xml.="</data>\n";
  $xml.="</root>\n";


  echo $xml;


   }






PHP xml方式封装接口数据方法
封装方法:
xmlEncode($code,$message="",$data=array())




复杂数组解析不出来:


<?php 
 class Response{
 
   public static function xmlEncode($code,$message,$data=array()){
   if(!is_numeric($code)){
   return ‘‘;
   }
   $result=array(
‘code‘=>$code,
‘message‘=>$message,
‘data‘=>$data,
  );
   header("Content-Type:text/xml");
   $xml="<?xml version=‘1.0‘ encoding=‘UTF-8‘?>\n";
   $xml.="<root>\n";//用点好和前面的字符串链接,这个是根节点
   $xml.=self::xmlToEncode($result);
   $xml.="</root>\n";
   echo $xml;
   }
 public static function xmlToEncode($data){
//解析数组,拼装成xml数据
$xml= "";
foreach($data as $key=>$value){
$xml.= "<{$key}>";//大括号里面可以被识别为变量
   $xml.= $value;
$xml.="</{$key}>";
}
return $xml;
}


}
$data=array(
‘id‘=> 1,
‘name‘=>‘david‘
);
Response::xmlEncode(200,‘success‘,$data);
?>


出现:
<root>
<code>200</code>
<message>success</message>
<data>Array</data>
</root>
 
当foreach循环到最后一个数据时$value为数组,所以不会显示出来,因此需要


递归的调用xmlToEncode($value)
就是讲上面的代码 
 $xml.= is_$value;改为:
 $xml.=is_array($value)?self::xmlToEncode($value):$value;
结果:
<root>
<code>200</code>
<message>success</message>
<data>
<id>1</id>
<name>david</name>
</data>
</root>


如果要封装的数据不是key=>value形式:
(1,2,3)会自动封装成xml <0>1</0><1>2</1><2>2</2> 数字不能作标签所以


报错
可以转换成:
<item id="0">1</item>形式


最终版:
<?php 
 class Response{
/**
*按json方式输出通信数据
*@param integer $code 状态码
*@param string $message 提示信息
*@param array $data 数据
*return string 返回值为json
*/
//静态方法,构造json数据
/*public static function json($code,$message=‘‘,$data=array()){


   if(!is_numeric($code)){
     return ‘‘;
      }
   $result=array(
    ‘code‘=>$code,
    ‘message‘=>$message,
    ‘data‘=>$data
      );
echo json_encode($result);
exit;
   }*/
   /*public static function xml(){
  header("Content-Type:text/xml");
  $xml="<?xml version=‘1.0‘ encoding=‘UTF-8‘?>\n";
  $xml.="<root>\n";//用点好和前面的字符串链接,这个是根节点
  $xml.="<code>200</code>\n";
  $xml.="<message>数据返回成功</message>\n";
  $xml.="<data>\n";
  $xml.="<id>1</id>\n";
  $xml.="<name>david</name>\n";
  $xml.="</data>\n";
  $xml.="</root>\n";


  echo $xml;


   }*/
   public static function xmlEncode($code,$message,$data=array()){
   if(!is_numeric($code)){
   return ‘‘;
   }
   $result=array(
‘code‘=>$code,
‘message‘=>$message,
‘data‘=>$data,
  );
   header("Content-Type:text/xml");
   $xml="<?xml version=‘1.0‘ encoding=‘UTF-8‘?>\n";
   $xml.="<root>\n";//用点好和前面的字符串链接,这个是根节点
   $xml.=self::xmlToEncode($result);
   $xml.="</root>\n";
   echo $xml;
   }
 public static function xmlToEncode($data){
//解析数组,拼装成xml数据
$xml= $attr="";

foreach($data as $key=>$value){
if(is_numeric($key)){
   $attr=" id=‘{$key}‘";
   $key="item";
}
$xml.= "<{$key}{$attr}>";//大括号里面可以被识别为变量
   $xml.=is_array($value)?self::xmlToEncode($value):$value;
$xml.="</{$key}>";
}
return $xml;
}


}
$data=array(
‘id‘=> 1,
‘name‘=>‘david‘,
‘type‘=>array(4,5,6)
);
Response::xmlEncode(200,‘success‘,$data);
?>

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。