浅谈PHP处理XML文档的技术手段(一)——SAX解析器

本文介绍了XML解析器的基本概念,重点讲解了PHP中SAX解析器的使用,包括创建解析器句柄、注册回调函数、解析XML文档等关键步骤。SAX解析器适合对XML进行顺序处理,但无法进行复杂搜索和处理交叉引用。
摘要由CSDN通过智能技术生成

前段时间自学了使用php代码来实现相应的解析器,现在将其重点归纳一下。
**内容:
1.XML解析器介绍
2.SAX解析器的介绍及函数库的使用
3.使用SAX解析器对XML进行处理**

这里先来讲一下XML解析器的概念。它其实是一个程序,能够用来读取、解析和验证XML文档。XML解析器为程序员提供了二次开发的软件包,程序员通过调用其提供的函数接口,从而对XML文档执行各种操作。

如今各种主流的Web浏览器其实都包含内置的XML解析器,用来解析XML文档,以便在浏览器中以指定的格式输出XML文档。

在php中,有多种技术能够用来处理XML文档。例如SAX解析器、DOM解析器、SimpleXML解析器、XMLReader类库以及XSL处理函数。前四种用来读取和解析XML文档,同时完成对XML文档的有效性检验,而XSL处理函数用来转换XML文档,以便在浏览器上显示其内容。要在php中解析XML文档,需要在其代码中对解析器进行初始化,并调用其内置函数进行处理。

XML可分为两类:(1).基于事件驱动的XML解析器。(2).基于树的XML解析器。

对于前者,它在内存中不断处理XML数据和标签,一次处理一个。对于这类的解析器,当它遇到XML文档中任何XML元素或者数据时,它会产生一个事件,并调用相应的事件处理程序来进行处理。
这类解析器典型的代表有:SAX解析器。

SAX(Simple API for XML)解析器,它按照顺序处理XML文档,当它扫描到各类元素标签时,调用相应的处理程序(这些处理程序为程序员自己定义,也称之为回调函数)完成相应的处理,直至XML文档结束。

SAX解析器是把XML文档当成字符串进行处理,适合对一种元素进行重复处理。它的缺点也很明显,因为它是顺序处理的,并且在解析时,它并没有将整个XML文档装入内存中。因而,它不能随机读取任何一个元素,也不能实现复杂的搜索。对于内部结构交叉引用的文档,它处理起来比较吃力。

接下来,将分析SAX解析器的函数库:
1.创建新的XML解析器句柄
例如:

//对解析器进行初始化
$xparser=xml_parser_create("utf-8");

它的格式为 int xml_parser_create([string encoding])
enconding参数为解析后出去数据的编码,php5及其以上版本默认的值为UTF-8。
该函数执行成功会返回一个可被其他XML函数使用的XML解析器句柄。
2.注册元素的开始标签和结束标签的回调函数
例如:

//注册开始标签和结束标签的回调函数
xml_set_element_handler($xparser,"startHandler","endHandler");

第一个参数为XML解析器句柄,第二第三个参数分别为开始标签和结束标签的回调函数名,注册成功则返回TRUE,注册失败则返回FALSE。这两个回调函数都需要程序员自己定义。
例如:
开始标签的回调函数:

/**
 * 开始标签的回调函数
 * @param $xparser XML解析器语句句柄
 * @param $element_name 元素名称
 * @param $attributes 包含这个元素所有属性的关联数组,数组元素的下表为属性名称,元素的值为属性的值
 */
 function startHandler($xparser,$element_name,$attributes){
    if($element_name=="department"){
        echo'<center><table border="1" cellpadding="0" cellspacing="0">';
    }else if($element_name=="employee"){
        echo'<tr>';
    }else if($element_name=="name")
    {  /**
        *PHP的list()和each()函数访问数组变量
        */
        list($key,$value)=each($attributes);
        echo "<td&
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值