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 相关文章推荐
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
Apr 23 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
Jul 01 PHP
比较discuz和ecshop的截取字符串函数php版
Sep 03 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
php阻止页面后退的方法分享
Feb 17 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
PHP内存缓存Memcached类实例
Dec 08 PHP
php验证手机号码
Nov 11 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
PHP simplexml_load_string()函数实例讲解
Feb 03 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
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
jquery text()要注意啦
2009/10/30 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
javascript中Function类型详解
2015/04/28 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
Python复制目录结构脚本代码分享
2015/03/06 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
Python 列表反转显示的四种方法
2020/11/16 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
金智子午JAVA面试题
2015/09/04 面试题
消防安全管理制度
2014/02/01 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
预备党员承诺书
2014/03/25 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
Python 中的 copy()和deepcopy()
2021/11/07 Python