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 相关文章推荐
php分页函数
Jul 08 PHP
一个用php3编写的简单计数器
Oct 09 PHP
php中curl使用指南
Feb 05 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 PHP
PHP模板引擎Smarty自定义变量调解器用法
Apr 11 PHP
php简单处理XML数据的方法示例
May 19 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
PHP Include文件实例讲解
Feb 15 PHP
PHP实现简单的协程任务调度demo示例
Feb 01 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使用curl访问https示例分享
2014/01/17 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
Python 控制终端输出文字的实例
2019/07/12 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
信息管理专业学生自荐信格式
2013/09/22 职场文书
大学生的四年学习自我评价
2013/12/13 职场文书
往来会计岗位职责
2013/12/19 职场文书
维稳工作情况汇报
2014/10/27 职场文书
离婚民事起诉状
2015/08/03 职场文书
MySQL学习之基础命令实操总结
2022/03/19 MySQL