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 相关文章推荐
Windows下的PHP5.0安装配制详解
Sep 05 PHP
快速配置PHPMyAdmin方法
Jun 05 PHP
php session处理的定制
Mar 16 PHP
比file_get_contents稳定的curl_get_contents分享
Jan 11 PHP
PHP 观察者模式的实现代码
May 10 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
php准确计算复活节日期的方法
Apr 18 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
使用laravel的migrate创建数据表的方法
Sep 30 PHP
PHP 实现链式操作
Mar 09 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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
用PHP实现将GB编码转换为UTF8
2006/11/25 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
Python映射拆分操作符用法实例
2015/05/19 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
对python中的高效迭代器函数详解
2018/10/18 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
物业消防安全责任书
2014/07/23 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
Ruby处理CSV数据方法详解
2022/04/18 Ruby
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL