PHP读取xml方法介绍


Posted in PHP onJanuary 12, 2013

一,什么是xml,xml有什么用途

XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
XML的用途很多,可以用来存储数据,可以用来做数据交换,为很多种应用软件提示数据等等。
二,php读取xml的方法

xml源文件

<?xml version="1.0 encoding="UTF-8"?> 
<humans> 
<zhangying> 
<name>张映</name> 
<sex>男</sex> 
<old>28</old> 
</zhangying> 
<tank> 
<name>tank</name> 
<sex>男</sex> 
<old>28</old> 
</tank> 
</humans>

1)DOMDocument读取xml

<?php 
$doc = new DOMDocument(); 
$doc->load('person.xml'); //读取xml文件 
$humans = $doc->getElementsByTagName( "humans" ); //取得humans标签的对象数组 
foreach( $humans as $human ) 
{ 
$names = $human->getElementsByTagName( "name" ); //取得name的标签的对象数组 
$name = $names->item(0)->nodeValue; //取得node中的值,如<name> </name> 
$sexs = $human->getElementsByTagName( "sex" ); 
$sex = $sexs->item(0)->nodeValue; 
$olds = $human->getElementsByTagName( "old" ); 
$old = $olds->item(0)->nodeValue; 
echo "$name - $sex - $old\n"; 
} 
?>

2)simplexml读取xml

<?php 
$xml_array=simplexml_load_file('person.xml'); //将XML中的数据,读取到数组对象中 
foreach($xml_array as $tmp){ 
echo $tmp->name."-".$tmp->sex."-".$tmp->old."<br>"; 
} 
?>

3)用php正则表达式来记取数据

<?php 
$xml = ""; 
$f = fopen('person.xml', 'r'); 
while( $data = fread( $f, 4096 ) ) { 
$xml .= $data; 
} 
fclose( $f ); 
// 上面读取数据 
preg_match_all( "/\<humans\>(.*?)\<\/humans\>/s", $xml, $humans ); //匹配最外层标签里面的内容 
foreach( $humans[1] as $k=>$human ) 
{ 
preg_match_all( "/\<name\>(.*?)\<\/name\>/", $human, $name ); //匹配出名字 
preg_match_all( "/\<sex\>(.*?)\<\/sex\>/", $human, $sex ); //匹配出性别 
preg_match_all( "/\<old\>(.*?)\<\/old\>/", $human, $old ); //匹配出年龄 
} 
foreach($name[1] as $key=>$val){ 
echo $val." - ".$sex[$key][1]." - ".$old[$key][1]."<br>" ; 
} 
?>

4)xmlreader来读取xml数据

<?php 
$reader = new XMLReader(); 
$reader->open('person.xml'); //读取xml数据 
$i=1; 
while ($reader->read()) { //是否读取 
if ($reader->nodeType == XMLReader::TEXT) { //判断node类型 
if($i%3){ 
echo $reader->value; //取得node的值 
}else{ 
echo $reader->value."<br>" ; 
} 
$i++; 
} 
} 
?>

三,小结

读取xml的方法很多,简单举几个。上面四种方法都是可以把标签中的数据读出来,张映.但是他们的测重点不同,前三种方法的读取xml的function的设计重点,是为了读取标签中的值,相当于jquery中的text()方法,而xmlreader呢他就不太一样,他的重点不在读取标签中的值,而读取标签的属性,把要传送的数据,都放在属性中(不过我上面写的那个方法还是取标签中的值,因为xml文件已经给定了,我就不想在搞xml文件出来了)。

举个例子解释一下,

<data name='张映' sex='男' old='28′></data>

xmlreader的设计重点是为了读data里面的name sex old的值,而读取的内容就比较麻烦了。他相当于jquery中attr(”);这个东西。

上面纯属个人看法,请大家指正。希望对大家有帮助。

PHP 相关文章推荐
初探PHP5
Oct 09 PHP
PHP4 与 MySQL 数据库操作函数详解
Dec 06 PHP
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
php中数字0和空值的区别分析
Jun 05 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
Jul 31 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
php中配置文件保存修改操作 如config.php文件的读取修改等操作
May 12 PHP
用PHP编写和读取XML的几种方式
Jan 12 #PHP
php图片的裁剪与缩放生成符合需求的缩略图
Jan 11 #PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 #PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 #PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 #PHP
PHP跨时区(UTC时间)应用解决方案
Jan 11 #PHP
PHP编程函数安全篇
Jan 08 #PHP
You might like
乐信RP2100的电路分析和打磨
2021/03/02 无线电
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
javascript 自动填写表单的实现方法
2010/04/09 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
JS交换变量的方法
2015/01/21 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
python和C语言混合编程实例
2014/06/04 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
利用python爬取有道词典的方法
2020/12/08 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
编写strcpy函数
2014/06/24 面试题
银行办公室岗位职责
2014/03/10 职场文书
2015年信访工作总结
2015/04/07 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技