PHP XML Expat 解析器

PHP XML Expat 解析器



内建的 Expat 解析器使在 PHP 中处理 XML 文档成为可能。


XML 是什么?

XML 用于描述数据,其焦点是数据是什么。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!

工作原理:

  1. 通过 xml_parser_create() 函数初始化 XML 解析器
  2. 创建配合不同事件处理程序的的函数
  3. 添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数
  4. 添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字符数据时执行哪个函数
  5. 通过 xml_parse() 函数来解析文件 "test.xml"
  6. 万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明
  7. 调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存

更多 PHP Expat 解析器的信息

如需了解更多关于 PHP Expat 函数的信息,请访问我们的 PHP XML Parser 参考手册

时间: 2024-10-21 00:02:16

PHP XML Expat 解析器的相关文章

雷林鹏分享:PHP XML Expat 解析器

内建的 Expat 解析器使在 PHP 中处理 XML 文档成为可能. XML 是什么? XML 用于描述数据,其焦点是数据是什么.XML 文件描述了数据的结构. 在 XML 中,没有预定义的标签.您必须定义自己的标签. 如需学习更多关于 XML 的知识,请访问我们的 XML 教程. Expat 是什么? 如需读取和更新 - 创建和处理 - 一个 XML 文档,您需要 XML 解析器. 有两种基本的 XML 解析器类型: 基于树的解析器:这种解析器把 XML 文档转换为树型结构.它分析整篇文档,

XML文件解析器TXml

前几天看了开源的XML文件解析器TinyXml,它是怎么实现解析的没怎么看懂,于是决定自己实现一个,反正最近不忙.先命名为TXml.现在完成了解析和查询功能,全部代码加起来不到1000行,将会继续完善它.源码必共享 先简单说一下我的思路: 1:读取XML文件信息,并存入一个字符数组中: 2:遍历数组,将数组解析成一棵树: 3:以路径的方式查询和按属性查询: 这个解析器最麻烦的地方就在怎么将字符数组解析成一颗树.我们先看一下一个简单XML文件,他包括文件头.节点.节点名称及节点值.属性名称及属性值

XML DOM 解析器

大多数浏览器都内建了供读取和操作 XML 的 XML 解析器. 解析器把 XML 转换为 JavaScript 可存取的对象(XML DOM). XML 解析器 XML DOM 包含了遍历 XML 树,访问.插入及删除节点的方法(函数). 然而,在访问和操作 XML 文档之前,它必须加载到 XML DOM 对象. XML 解析器读取 XML,并把它转换为 XML DOM 对象,这样才可以使用 JavaScript 访问它. 大多数浏览器有一个内建的 XML 解析器. 加载 XML 文档 下面的

Spring MVC-视图解析器(View Resolverr)-XML视图解析器(Xml View Resolver)示例(转载实践)

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_xmlviewresolver.htm 说明:示例基于Spring MVC 4.1.6. XmlViewResolver用于使用在xml文件中定义的视图bean来解析视图名称.以下示例显示如何使用Spring Web MVC框架使用XmlViewResolver. TestWeb-servlet.xml <bean class="org.springframework.we

Spring MVC Xml视图解析器

XmlViewResolver用于在xml文件中定义的视图bean来解析视图名称.以下示例演示如何在Spring Web MVC框架使用XmlViewResolver. XmlViewResolver-servlet.xml 配置如下所示 - <bean class="org.springframework.web.servlet.view.XmlViewResolver"> <property name="location"> <va

Rails 4.0 移除了 XML 参数解析器。若要使用请加入 actionpack-xml_parser

拜读了用 Rails 搭建微信公众平台 API之后发现, params[:xml]这个办法在Rails 4里面已经被办掉了,于是就看了一下Rails 4的新特性发现XML Parameter parsing has been sent to a plugin. http://www.rubydoc.info/github/rails/actionpack-xml_parser actionpack-xml_parser A XML parameters parser for Action Pac

XML解析器

一.操作XML文档概述 1.如何操作XML文档 XML文档也是数据的一种,对数据的操作也不外乎是"增删改查".也被大家称之为"CRUD" C:Create: R:Retrieve: U:Update: D:Delete 2.XML解析技术 XML解析方式分为两种:DOM(Document Object Model)和SAX(Simple API for XML).这两种方式不是针对Java语言来解析XML的技术,而是跨语言的解析方式.例如DOM还在Javascrip

Spring 4 MVC 视图解析器(XML JSON PDF等) 纯注解(带源码)【推荐】

原文地址:http://websystique.com/springmvc/spring-4-mvc-contentnegotiatingviewresolver-example/ [本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看.源码下载地址在文章末尾.] [翻译 by 明明如月 QQ 605283073] 下一篇:Spring 4 MVC @RestController 注解实现REST Service 上一篇:Spring 4 MVC 表单校验资源处理(带源码)

Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的.结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD定义了文