Expat Parser解析xml文件

Expat 解析器是基于事件的解析器。

基于事件的解析器集中在 XML 文档的内容,而不是它们的结构。正因为如此,基于事件的解析器能够比基于树的解析器更快地访问数据。

请看下面的 XML 片段:

<from>Jani</from>

基于事件的解析器把上面的 XML 报告为一连串的三个事件:

  • 开始元素:from
  • 开始 CDATA 部分,值:Jani
  • 关闭元素:from

Expat 是不检查有效性的解析器,忽略任何 DTD。

作为一款基于事件、非验证的 XML 解析器,Expat 快速且轻巧,十分适合 PHP 的 Web 应用程序。

注释:XML 文档必须形式良好,否则 Expat 会生成错误。

XML文档:

<?xml version="1.0" encoding="utf-8"?>
<note>
<to>老爸</to>
<from>儿子</from>
<heading>问候</heading>
<body>最近身体好吗,天气变冷,记得多穿衣服</body>

<to>老妈</to>
<from>儿子</from>
<heading>问候</heading>
<body>最近身体好吗,天气变冷,记得多穿衣服</body>
</note>

PHP文件:

<?php
$parser=xml_parser_create();

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;
}

xml_set_element_handler($parser,"start","stop");
xml_set_character_data_handler($parser,"char");

$fp=fopen("test.xml","r");

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)));
}

xml_parser_free($parser);
?>

解析原理:

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

Expat Parser解析xml文件的相关文章

PHP-四种解析XML文件的方法

XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. 1. XML Expat Parser: XML Parser使用Expat XML解析器.Expat是一种基于事件的解析器,它把XML文档视为一系列事件.当某个事件发生时,它调用一个指定的函数处理它.Expat是无验证的 解析器,忽略任何链接到文档的DTD.但是,如果文档的形式不好,则会以一个错

解析xml文件的几个步骤

1.生成xml文件的解析器 XmlPullParser parser = Xml.newPullParser(); 2.设置解析器读取流对象的编码格式 parser.setInput(is, "utf-8"); 3.设置解析xml文件之后要存储的位置 List<WeatherInfo> weatherInfo = null; WeatherInfo info = null; 4.定义解析器解析到的事件类型 int type = parser.getEventType();

SAX解析XML文件

SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准.SAX是一种轻量型的方法,不像DOM解析时,把XML文档全部载入内存中,在PC上操作,Dom还有 优势,但在手机中端上则无优势,因为手机内存和硬件都比不上PC强.使用 SAX 是比较安全的,并且 Android 提供了一种传统的 SAX 使用方法,以及一个便捷的 SAX 包装器.SAX采用基于事件驱动的处理方式,它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理. 在SAX接口中,事件源是org

利用Pull生成和解析xml文件

解析xml的方式有很多,可以用dom,sax解析,但是在android平台上最常用是Pull解析,下面是简单的示例 <?xmlversion="1.0" encoding="UTF-8"?> <persons> <person id="18"> <name>allen</name> <age>36</age> </person> <person

SAX方式解析XML文件的方法分析

SAX(Simple API for XML)SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束.元素(element)开始与结束.文档(document)结束等地方时通知事件处理方法,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束.SAX解析方式适用于大型文档,因为他的解析是逐行进行不用像DOM中那样为所有节点创建对象,这样效率大大提高,所以虽然它不是W3C标准,但它却得到了广泛认可. 这是一个需要解析的XML文件: <?xml versio

解析xml文件作为下拉列表的数据源

需求:有一个xml文件,包含省市县的信息(id,name,下属分划) 将xml文件信息解析到安卓下拉列表(spinner),三个下拉列表,第一个显示省名,第二个显示市名,第三个显示县名 要求选择第一个下拉列表的一个省名,相应市县信息跟随变化 方案分析: 1.因为要解析xml文件的全部信息,可以选择pull解析或者sax解析 2.有省.市.县等信息 则要有三个对应的实体类 xml文件 部分内容 1 - <p p_id="01"> 2 <pn>北京</pn&g

解析XML文件的两种方式 SAX和DOM

1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 2.XML数据结构 XML:Extensible Markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. XML数据格式的功能 数据交换 内容管理 用作配置文件 XML数据结构的语法 声明 节点使用一对标签表示:起始和结束标签. 根节点是起始节点,只有一

js实现的解析xml文件和xml字符串代码实例

js实现的解析xml文件代码实例:下面分享一段代码实例,它实现了对xml文件的解析作用.代码如下: loadXML = function(xmlFile){ var xmlDoc=null; //判断浏览器的类型 //支持IE浏览器 if(!window.DOMParser && window.ActiveXObject){ var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsof

IOS解析XML文件

这里使用NSXMLParser来解析,这个是apple自带的xml解析库,有个参考文章:http://www.raywenderlich.com/553/xml-tutorial-for-ios-how-to-choose-the-best-xml-parser-for-your-iphone-project 在Xcode中加入一个xml文件: <?xml version="1.0" encoding="ISO-8859-1"?> <root>