parser是php内置的一个用来处理xml的解析器,它的工作由三个事件组成:起始标签、 读取数据、结束标签。 
也就是说在对xml进行处理的时候每当遇到起始标签、数据和结束标签的时候函数会做相应的动作来完成对xml数据的转换。 
php中对xml读取的相关函数的介绍: 
引用: 
对象 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数据的例子:

<?php 
//创建一个parser编辑器 
$parser = xml_parser_create();  
//设立标签触发时的相应函数 这里分别为startElement和endElenment 
xml_set_element_handler($parser, "startElement", "endElement"); 
//设立数据读取时的相应函数 
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); 
//关闭和释放parser解析器 
xml_parser_free($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; 

?>

xml文件代码如下:

<?xml version="1.0"?> 
<employees> 
<employee> 
<name>网站名称</name> 
<position age="45">php自学网</position> 
</employee> 
<employees> 
<employee> 
<name>网站URL</name> 
<position age="45">http://www.phpzixue.cn</position>
</employee> 
</employees>    

用php读取xml数据的更多相关文章

  1. wcf序列化大对象时报错:读取 XML 数据时,超出最大

    错误为: 访问服务异常:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出 错: request.InnerException 消息是“反序 ...

  2. InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)

    WEB站点在调用我们WCF服务的时候,只要传入的参数过长,就报如下错误: 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formD ...

  3. Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

    1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...

  4. 读取 XML 数据时,超出最大字符串内容长度配额 (8192)

    格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://www.thermo.com/informatics/xmlns/limswebservice 进行反序列化时出错: Process ...

  5. 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetLzdtArticleResult。InnerException 消息是“反序列化对象 属于类型 lzdt.DTO.Dtolzdt[] 时出现错误。读取 XML 数据时,超出最大

    当遇到这个错误的时候郁闷了好长时间报错是字符串长度过大可是修改了MaxStringContentLength”属性的值却不起作用最后才发现还是因为配置文件配置的问题在服务端 格式化程序尝试对消息反序列 ...

  6. XML序列化器读取XML数据

    PS:标题我还真的不知道该怎么取比较好,大家将就下吧^_^ 场景:上周接到一个任务,要求我把ASP写的会员充值功能,用ASP.NET复制一遍,没有给我需求文档,就是让我根据代码去分析业务逻辑,然后看到 ...

  7. [drp 4] 使用dom4j,读取XML数据,保存至数据库

    导读:上篇文章介绍了用XML文件配置数据库的连接,然后通过读取XML文件连接数据库的内容,本篇博客介绍读取XML文件,进行数据持久化的操作.PS:从某种意义上来说,经过Scheme校正的XML文件,本 ...

  8. 使用Java读取XML数据

    ---------------siwuxie095 工程名:TestReadXML 包名:com.siwuxie095.xml 类名:ReadXML.java 打开资源管理器,在工程 TestRead ...

  9. 读取xml数据装配到字典中之应用场景

    前段时间看到支付宝设置里面有个多语言这个功能,蛮有意思的,就想双休没事的话做个相关的demo玩玩,可是礼拜六被妹子拽出去玩了一天,来大上海有大半年了,基本没有出去玩过,妹子说我是超级宅男,也不带她出去 ...

随机推荐

  1. image压缩

    public byte[] compressPic(byte[] data) { if(data.length == 0){ return new byte[0]; } Image img = nul ...

  2. poj 1741 两点距离小于K(树DP)

    http://blog.csdn.net/woshi250hua/article/details/7723400 求两点间距离小于等于k的方案数 理一下思路: 求通过点A与另一点连接符合条件的个数 = ...

  3. springmvc+spring+mybatis+sqlserver----查询sqlserver----有返回参数

    <resultMap type="java.util.HashMap" id="resultMap"> <result column=&quo ...

  4. HTML的行内元素与块级元素的区别?

    块级元素:独占一行,其宽度自动填满父元素的宽度,可以容纳行内元素和其他块级元素,可以设置margin和padding值. 行内元素:不会独占一行,与其他行内元素排成一行,直到其父元素拍不下,才会从新一 ...

  5. vue组件双向绑定.sync修饰符的一个坑

    我们知道组件是单项的,但是有时候需要双向,这时候我们可以使用.sync修饰符,但今天遇到一个坑,一直不成功,花了半小时试出来的.... 在编程的时候我们很习惯冒号后面跟着空格.而.sync双向绑定需要 ...

  6. Kindeditor单独调用单图上传增加预览

    html代码: <p><input type="hidden" id="url1" name="IDCardPicture1&quo ...

  7. IE浏览器在线更新GitHub客户端

    在IE中输入网址:http://github-windows.s3.amazonaws.com/GitHub.application

  8. <Android 基础(十二)> TextInputLayout,让输入框更有灵性

    介绍 Layout which wraps an {@link android.widget.EditText} (or descendant) to show a floating label wh ...

  9. SpringBoot的运行原理

    SpringBoot关于自动配置的源码在spring-boot-autoconfigure-xxxxx.jar中 <源码解析> 查看当前项目中已启用的和未启用的自动配置的报告的三种方法: ...

  10. android studio gradle统一管理版本

    创建config.gradle ext { android = [ compileSdkVersion : 26, buildToolsVersion : "26.0.2", mi ...