Web_PHP_PHP XML Expat 解析器浅谈;

1、基本XML解析器类型
(1)、基于树型的解析器
说明:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供API 来访问树中的元素。例如文档对象模型 (DOM)。
(2)、基于事件的解析器

说明:将 XML 文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。

2、什么是 Expat?
前言:如需读取和更新(创建并处理)XML 文档,您需要 XML 解析器。
说明:Expat 解析器是基于事件的解析器。基于事件的解析器集中在 XML 文档的内容,而不是它们的结果。正因如此,基于事件的解析器能够比基于树的解析器更快地访问数据。

3、解析实例

(1)、XML文件

<span style="font-size:18px;"><?xml version="1.0" encoding="ISO-8859-1"?>
<note>
	<to>cyb</to>
	<from>tl</from>
	<heading>Reminder</heading>
	<body>Don't forget the meeting!</body>
</note></span>

(2)、初始化XML解析器
前言:要在 PHP 中初始化 XML 解析器,为不同的 XML 事件定义处理器,然后解析这个 XML 文件。

<span style="font-size:18px;"><?php
	///1、初始化解析器
	$parser=xml_parser_create();

	///2、事件函数
	// 元素开始函数
	function start($parser,$element_name,$element_attrs)
	{
	  switch($element_name)
	  {
	    case "NOTE":
		    echo "-- Note --<br />";
		    break; 
	    case "TO":
		    echo "To: ";
		    break; 
	    case "FROM":
		    echo "From: ";
		    break; 
	    case "HEADING":
		    echo "Heading: ";
		    break; 
	    case "BODY":
		echo "Message: ";
	  }
	}

	// 元素结束函数
	function stop($parser,$element_name)
	{
		echo "<br />";
	}

	// 数据处理函数
	function char($parser,$data)
	{
		echo $data;
	}

	///3、事件监听
	// 指定元素监听
	xml_set_element_handler($parser,"start","stop");

	// 指定数据监听
	xml_set_character_data_handler($parser,"char");

	///4、 打开XML文件
	$fp=fopen("test.xml","r");

	///5、 读取XML数据
	while ($data=fread($fp,4096))
	{
		/// 6、解析
		xml_parse($parser,$data,feof($fp)) or 
		die (sprintf("XML Error: %s at line %d",  xml_error_string(xml_get_error_code($parser)),xml_get_current_line_number($parser)));
	}

	///7、释放解析器
	xml_parser_free($parser);

?></span>
(3)、结果输出
-- Note --
To: George
From: John
Heading: Reminder
Message: Don't forget the meeting!
(4)、工作原理
通过 xml_parser_create() 函数初始化 XML 解析器;
创建配合不同事件处理程序的的函数;
添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数;
添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字符数据时执行哪个函数;
通过 xml_parse() 函数来解析文件 "test.xml";
万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明;
调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值