您的位置:首页 > 编程语言 > PHP开发

Web_PHP_PHP XML Expat 解析器浅谈;

2015-01-02 10:13 387 查看
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() 函数的内存;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: