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使之能同时支持GIF和JPEG
Oct 09 PHP
php用数组返回无限分类的列表数据的代码
Aug 08 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
php静态文件生成类实例分析
Jan 03 PHP
php模拟post提交数据的方法
Feb 12 PHP
php实现TCP端口检测的方法
Apr 01 PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 PHP
php的debug相关函数用法示例
Jul 11 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
关于php开启错误提示的总结
Sep 24 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
Sep 27 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官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
javascript版2048小游戏
2015/03/18 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
python算法学习之基数排序实例
2013/12/18 Python
Python字符串处理函数简明总结
2015/04/13 Python
利用Python开发微信支付的注意事项
2016/08/19 Python
详解Python中的文件操作
2016/08/28 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
2019/12/03 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
什么是python的列表推导式
2020/05/26 Python
Python生成并下载文件后端代码实例
2020/08/31 Python
美国女孩服装购物网站:Justice
2017/03/04 全球购物
求职简历中的自我评价分享
2013/12/08 职场文书
《在家里》教后反思
2014/03/01 职场文书
高中军训感言800字
2014/03/05 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
周一问候语大全
2015/11/10 职场文书
python中 Flask Web 表单的使用方法
2022/05/20 Python