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 PDO函数库详解
Apr 27 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
php实现webservice实例
Nov 06 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
Dec 24 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
javascript 特殊字符串
2009/02/25 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
React Hooks的深入理解与使用
2018/11/12 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
深入了解python列表(LIST)
2020/06/08 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
《春雨》教学反思
2014/04/24 职场文书
医院义诊活动总结
2014/07/04 职场文书
2014年质量工作总结
2014/11/22 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
同学联谊会邀请函
2019/06/24 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python
Python几种酷炫的进度条的方式
2022/04/11 Python
Oracle锁表解决方法的详细记录
2022/06/05 Oracle