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 cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
PHP排序算法的复习和总结
Feb 15 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 PHP
如何用php获取程序执行的时间
Jun 09 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
PHP中的访问修饰符简单比较
Feb 02 PHP
PHP删除数组中特定元素的两种方法
Feb 28 PHP
PHP session垃圾回收机制实例分析
Jun 28 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 PHP
PHP SESSION跨页面传递失败解决方案
Dec 11 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伪造referer实例代码
2008/09/20 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
js打印纸函数代码(递归)
2010/06/18 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
python3使用pandas获取股票数据的方法
2018/12/22 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
Python模块 _winreg操作注册表
2020/02/05 Python
python从Oracle读取数据生成图表
2020/10/14 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
详解python的变量缓存机制
2021/01/24 Python
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
餐厅销售主管职责范本
2014/02/19 职场文书
上课看小说检讨书
2014/02/22 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers