1、基本XML解析器类型
(1)、基于树型的解析器
说明:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供API 来访问树中的元素。例如文档对象模型 (DOM)。
(2)、基于事件的解析器
(2)、初始化XML解析器
前言:要在 PHP 中初始化 XML 解析器,为不同的 XML 事件定义处理器,然后解析这个 XML 文件。
-- 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() 函数的内存;
(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() 函数的内存;