php中对xml读取的相关函数的介绍一


Posted in PHP onJune 05, 2008

对象 XML解析函数 描述 
元素 xml_set_element_handler() 元素的开始和结束 
字符数据 xml_set_character_data_handler() 字符数据的开始 
外部实体 xml_set_external_entity_ref_handler() 外部实体出现 
未解析外部实体 xml_set_unparsed_entity_decl_handler() 未解析的外部实体出现 
处理指令 xml_set_processing_instruction_handler() 处理指令的出现 
记法声明 xml_set_notation_decl_handler() 记法声明的出现 
默认 xml_set_default_handler() 其它没有指定处理函数的事件 

下面就给大家举一个小小的例子用parser函数来读取xml数据: 

xml文件代码如下: 

这个程序的结果如下:

引用: --------------------------------------------------------------------------------
名字:张三 职位:经理
名字:李四 职位:助理

<?xml version="1.0"?>  
<employees>  
<employee>  
<name>张三</name>  
<position age="45">经理</position>  
</employee>  
<employees>  
<employee>  
<name>李四</name>  
<position age="45">助理</position>  
</employee>  
</employees> 
<?php  
$parser = xml_parser_create(); //创建一个parser编辑器  
xml_set_element_handler($parser, "startElement", "endElement");//设立标签触发时的相应函数 这里分别为startElement和endElenment  
xml_set_character_data_handler($parser, "characterData");//设立数据读取时的相应函数  
$xml_file="1.xml";//指定所要读取的xml文件,可以是url  
$filehandler = fopen($xml_file, "r");//打开文件  while ($data = fread($filehandler, 4096))   
{  
    xml_parse($parser, $data, feof($filehandler));  
}//每次取出4096个字节进行处理  
fclose($filehandler);  
xml_parser_free($parser);//关闭和释放parser解析器  
$name=false;  
$position=false;  
function startElement($parser_instance, $element_name, $attrs)        //起始标签事件的函数  
 {  
   global $name,$position;    
   if($element_name=="NAME")  
   {  
   $name=true;  
   $position=false;  
   echo "名字:";  
  }  
  if($element_name=="POSITION")  
   {$name=false;  
   $position=true;  
   echo "职位:";  
  }  
}  
function characterData($parser_instance, $xml_data)                  //读取数据时的函数   
{  
   global $name,$position;  
   if($position)  
    echo $xml_data."<br>";  
    if($name)  
     echo $xml_data."<br>";  
}  
function endElement($parser_instance, $element_name)                 //结束标签事件的函数  
{  
 global $name,$position;   
$name=false;  
$position=false;    
}  
?> 

PHP读取xml方法介绍

一,什么是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 相关文章推荐
第十四节 命名空间 [14]
Oct 09 PHP
使用数据库保存session的方法
Oct 09 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
Jun 07 PHP
解析PHP提交后跳转
Jun 23 PHP
PHP中的替代语法介绍
Jan 09 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
php header函数的常用http头设置
Jun 25 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP实现多图上传和单图上传功能
May 17 PHP
php layui实现前端多图上传实例
Jul 30 PHP
php创建多级目录代码
Jun 05 #PHP
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 #PHP
php MySQL与分页效率
Jun 04 #PHP
php mysql数据库操作分页类
Jun 04 #PHP
php mysql数据库操作类
Jun 04 #PHP
CodeIgniter php mvc框架 中国网站
May 26 #PHP
五个PHP程序员工具
May 26 #PHP
You might like
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
一个简单实现多条件查询的例子
2006/10/09 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
php中apc缓存使用示例
2013/12/25 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
javascript for循环设法提高性能
2010/02/24 Javascript
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
Python中的filter()函数的用法
2015/04/27 Python
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
Python中return函数返回值实例用法
2020/11/19 Python
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
挪威手表购物网站:Klokker
2016/09/19 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
家长会邀请书
2014/01/25 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
我的求职择业计划书
2014/04/04 职场文书
爱我中华教学反思
2014/04/28 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
总结会主持词
2015/07/02 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
redis 解决库存并发问题实现数量控制
2022/04/08 Redis