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 相关文章推荐
Smarty模板快速入门
Jan 04 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
PHP中几个常用的魔术常量
Feb 23 PHP
PHP面向对象教程之自定义类
Jun 10 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
降低PHP Redis内存占用
Mar 23 PHP
Yii2汉字转拼音类的实例代码
Apr 18 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 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 Class&amp;Object -- 解析PHP实现二叉树
2013/06/25 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
checkbox使用示例
2013/08/23 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
python实现烟花小程序
2019/01/30 Python
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
简历的自我评价范文
2014/02/04 职场文书
学会感恩主题班会
2015/08/12 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书