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);
?>