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 相关文章推荐
php 分页原理详解
Aug 21 PHP
PHP JS Ip地址及域名格式检测代码
Sep 27 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
PHP5.2下preg_replace函数的问题
May 08 PHP
你应该知道PHP浮点数知识
May 13 PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
PHP读取Excel类文件
May 15 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
php解析非标准json、非规范json的方式实例
May 10 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
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
python生成器的使用方法
2013/11/21 Python
python七夕浪漫表白源码
2019/04/05 Python
python manage.py runserver流程解析
2019/11/08 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
印度网上药店:1mg
2017/10/13 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
应届生会计求职信
2013/11/11 职场文书
数学检讨书1000字
2014/02/24 职场文书
财务科科长岗位职责
2014/03/10 职场文书
党员民主评议个人总结
2014/10/20 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL