PHP 教程
- 第1节:PHP 简介
- 第2节:PHP 安装
- 第3节:PHP 语法
- 第4节:PHP 变量
- 第5节:PHP echo和print 语句
- 第6节:PHP 数据类型
- 第7节:PHP 常量
- 第8节:PHP 字符串变量
- 第9节:PHP 运算符
- 第10节:PHP if...else 语句
- 第11节:PHP switch 语句
- 第12节:PHP 数组
- 第13节:PHP 数组排序
- 第14节:PHP 超级全局变量
- 第15节:PHP while 循环
- 第16节:PHP for 循环
- 第17节:PHP 函数
- 第18节:PHP 魔术常量
- 第19节:PHP 命名空间
- 第20节:PHP 面向对象
- 第21节:PHP 表单
- 第22节:PHP 表单验证
- 第23节:PHP 表单 - 必需字段
- 第24节:PHP 表单 - 验证邮件和URL
- 第25节:PHP 完整表单实例
- 第26节:PHP $_GET 变量
- 第27节:PHP $_POST 变量
- 第28节:PHP 多维数组
- 第29节:PHP 日期
- 第30节:PHP date() 函数
- 第31节:PHP 包含
- 第32节:PHP 文件
- 第33节:PHP 文件上传
- 第34节:PHP Cookies
- 第35节:PHP Sessions
- 第36节:PHP E-Mail
- 第37节:PHP 安全 E-mail
- 第38节:PHP 错误处理
- 第39节:PHP 异常处理
- 第40节:PHP 过滤器
- 第41节:PHP 高级过滤器
- 第42节:PHP JSON
- 第43节:PHP MySQL 简介
- 第44节:PHP 连接 MySQL
- 第45节:PHP MySQL 创建数据库
- 第46节:PHP MySQL 创建数据表
- 第47节:PHP MySQL 插入数据
- 第48节:PHP MySQL 插入多条数据
- 第49节:PHP MySQL 预处理语句
- 第50节:PHP MySQL 读取数据
- 第51节:PHP MySQL Where 子句
- 第52节:PHP MySQL Order By 关键词
- 第53节:PHP MySQL Update
- 第54节:PHP MySQL Delete From
- 第55节:PHP 数据库 ODBC
- 第56节:PHP XML Expat 解析器
- 第57节:PHP XML DOM
- 第58节:PHP XML SimpleXML
- 第59节:PHP AJAX 简介
- 第60节:PHP – AJAX 与 PHP
- 第61节:PHP 实例 AJAX 与 MySQL
- 第62节:PHP 实例 AJAX 与 XML
- 第63节:PHP 实例 AJAX 实时搜索
- 第64节:PHP 实例 AJAX RSS 阅读器
- 第65节:PHP 实例 AJAX 投票
- 第66节:PHP 5 Array 函数
- 第67节:PHP 5 Calendar 函数
- 第68节:PHP cURL 函数
- 第69节:PHP 5 Date/Time 函数
- 第70节:PHP 5 Directory 函数
- 第71节:PHP Error 和 Logging 函数
- 第72节:PHP 5 Filesystem 函数
- 第73节:PHP Filter 函数
- 第74节:PHP FTP 函数
- 第75节:PHP HTTP 函数
- 第76节:PHP Libxml 函数
- 第77节:PHP Mail 函数
- 第78节:PHP 5 Math 函数
- 第79节:PHP Misc 函数
- 第80节:PHP MySQLi 函数
- 第81节:PHP PDO
- 第82节:PHP SimpleXML 函数
- 第83节:PHP String 函数
- 第84节:PHP XML 函数
- 第85节:PHP Zip File 函数
- 第86节:PHP Timezones
- 第87节:PHP 图像处理
- 第88节:PHP 序列化/反序列化函数
- 第89节:PHP 常用header头定义
PHP XML Expat 解析器
XML 是什么?
XML 用于描述数据,其焦点是数据是什么。XML 文件描述了数据的结构。
在 XML 中,没有预定义的标签。您必须定义自己的标签。
Expat 是什么?
如需读取和更新 - 创建和处理 - 一个 XML 文档,您需要 XML 解析器。
有两种基本的 XML 解析器类型:
- 基于树的解析器:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供了对树中元素的访问,例如文档对象模型 (DOM)。
- 基于事件的解析器:将 XML 文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。
Expat 解析器是基于事件的解析器。
基于事件的解析器集中在 XML 文档的内容,而不是它们的结构。正因为如此,基于事件的解析器能够比基于树的解析器更快地访问数据。
请看下面的 XML 片段:
<from>Jani</from>
基于事件的解析器把上面的 XML 报告为一连串的三个事件:
- 开始元素:from
- 开始 CDATA 部分,值:Jani
- 关闭元素:from
上面的 XML 实例包含了形式良好的 XML。不过这个实例是无效的 XML,因为没有与它关联的文档类型声明 (DTD)。
然而,在使用 Expat 解析器时,这没有区别。Expat 是不检查有效性的解析器,忽略任何 DTD。
作为一款基于事件、非验证的 XML 解析器,Expat 快速且轻巧,十分适合 PHP 的 Web 应用程序。
注释:XML 文档必须形式良好,否则 Expat 会生成错误。
安装
XML Expat 解析器函数是 PHP 核心的组成部分。无需安装就可以使用这些函数。
XML 文件
下面的 XML 文件将应用在我们的实例中:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
初始化 XML 解析器
我们要在 PHP 中初始化 XML 解析器,为不同的 XML 事件定义处理器,然后解析这个 XML 文件。
实例
<?php
//Initialize the XML parser
$parser=xml_parser_create();
//Function to use at the start of an element
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 to use at the end of an element
function stop($parser,$element_name)
{
echo "<br>";
}
//Function to use when finding character data
function char($parser,$data)
{
echo $data;
}
//Specify element handler
xml_set_element_handler($parser,"start","stop");
//Specify data handler
xml_set_character_data_handler($parser,"char");
//Open XML file
$fp=fopen("test.xml","r");
//Read data
while ($data=fread($fp,4096))
{
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)));
}
//Free the XML parser
xml_parser_free($parser);
?>
以上代码将输出:
-- Note --
To: Tove
From: Jani
Heading: Reminder
Message: Don't forget me this weekend!
To: Tove
From: Jani
Heading: Reminder
Message: Don't forget me this weekend!
工作原理:
- 通过 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() 函数的内存