PHP生成和获取XML格式数据的方法


Posted in PHP onMarch 04, 2016

本文实例讲述了PHP生成和获取XML格式数据的方法。分享给大家供大家参考,具体如下:

在做数据接口时,我们通常要获取第三方数据接口或者给第三方提供数据接口,而这些数据格式通常是以XML或者JSON格式传输,这里将介绍如何使用PHP生成XML格式数据供第三方调用以及如何获取第三方提供的XML数据。

生成XML格式数据

我们假设系统中有一张学生信息表student,需要提供给第三方调用,并有id,name,sex,age分别记录学生的姓名、性别、年龄等信息。

CREATE TABLE `student` (
 `id` int(11) NOT NULL auto_increment,
 `name` varchar(50) NOT NULL,
 `sex` varchar(10) NOT NULL,
 `age` smallint(3) NOT NULL default '0',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

首先,建立createXML.php文件,先连接数据库,获取数据。

include_once ("connect.php"); //连接数据库
$sql = "select * from student";
$result = mysql_query($sql) or die("Invalid query: " . mysql_error());
while ($row = mysql_fetch_array($result)) {
  $arr[] = array(
    'name' => $row['name'],
    'sex' => $row['sex'],
    'age' => $row['age']
  );
}

这个时候,数据就保存在$arr中,你可以使用print_r打印下数据测试。
接着,建立xml,循环数组,将数据写入到xml对应的节点中。

$doc = new DOMDocument('1.0', 'utf-8'); // 声明版本和编码
$doc->formatOutput = true;
$r = $doc->createElement_x("root");
$doc->appendChild($r);
foreach ($arr as $dat) {
  $b = $doc->createElement_x("data");
  $name = $doc->createElement_x("name");
  $name->appendChild($doc->createTextNode($dat['name']));
  $b->appendChild($name);
  $sex = $doc->createElement_x("sex");
  $sex->appendChild($doc->createTextNode($dat['sex']));
  $b->appendChild($sex);
  $age = $doc->createElement_x("age");
  $age->appendChild($doc->createTextNode($dat['age']));
  $b->appendChild($age);
  $r->appendChild($b);
}
echo $doc->saveXML();

我们调用了PHP内置的类DOMDocument来处理与生成xml。最终生成的xml格式请点击这里看效果

<?xml version="1.0" encoding="utf-8"?>
<root>
 <data>
  <name>李王皓</name>
  <sex>男</sex>
  <age>21</age>
 </data>
 ...
</root>

获取XML格式数据

现在我们假设要从第三方获取学生信息,数据格式是XML,我们需要使用PHP解析XML,然后将解析后的数据显示或者写入本地数据库。而这里关键的一步是解析XML。

PHP有很多中方法可以解析XML,其中PHP提供了内置的XMLReader类可以循序地浏览过xml档案的节点,你可以想像成游标走过整份文件的节点,并抓取需要的内容。使用XMLReader是高效的,尤其是读取非常大的xml数据,相对其他方法,使用XMLReader消耗内存非常少。

header("Content-type:text/html; Charset=utf-8");
$url = "http://www.helloweba.com/demo/importXML/createXML.php";
$reader = new XMLReader(); //实例化XMLReader
$reader->open($url); //获取xml
$i=1;
while ($reader->read()) {
 if ($reader->nodeType == XMLReader::TEXT) { //判断node类型
   $m = $i%3;
   if($m==1)
     $name = $reader->value; //读取node值
   if($m==2)
     $sex = $reader->value;
   if($m==0){
     $age = $reader->value;
     $arr[] = array(
       'name' => $name,
       'sex' => $sex,
       'age' => $age
     );
   }
   $i++;
 }
}
//print_r($arr);

为了将数据name,sex和age分开,我们使用$i%3来判断取模,因为在获取的xml中,节点data下的信息是以3个子节点存在的。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
粗略计算在线时间,bug:ip相同
Dec 09 PHP
Php图像处理类代码分享
Jan 19 PHP
解析dedecms空间迁移步骤详解
May 15 PHP
PHP分页类集锦
Nov 18 PHP
php rsa加密解密使用详解
Jan 14 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
php实现图片局部打马赛克的方法
Feb 11 PHP
php版微信公众平台入门教程之开发者认证的方法
Sep 26 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
PHP常见字符串操作函数与用法总结
Mar 04 PHP
php数组指针函数功能及用法示例
Feb 11 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
Aug 06 PHP
PHP使用fopen与file_get_contents读取文件实例分享
Mar 04 #PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 #PHP
zend framework中使用memcache的方法
Mar 04 #PHP
PHP结合Mysql数据库实现留言板功能
Mar 04 #PHP
实现PHP框架系列文章(6)mysql数据库方法
Mar 04 #PHP
Codeigniter中集成smarty和adodb的方法
Mar 04 #PHP
PHP常用技巧汇总
Mar 04 #PHP
You might like
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
布同 统计英文单词的个数的python代码
2011/03/13 Python
Python程序设计入门(1)基本语法简介
2014/06/13 Python
决策树的python实现方法
2014/11/18 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
python interpolate插值实例
2020/07/06 Python
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
西部世纪面试题
2014/12/05 面试题
主题教育活动总结
2014/05/05 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
导游词之湖北梁子湖
2019/11/07 职场文书
Python 视频画质增强
2022/04/28 Python