什么是Expat?
    如需读取和更新-创建创建并处理-一个XML文档
,您需要XML解析器
。    有两种基本的XML解析器类型:  
  基于树的解析器:这种解析器把XML文档转换为树型结构
。它分析整篇文档
,并提供了API来访问树种的元素,例如文档对象模型(DOM)。  
  基于事件的解析器:将XML文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。  
  Expat解析器是基于事件的解析器。  
  基于事件的解析器集中在XML文档的内容,而不是它们的结果。正因如此,基于事件的解析器能够比基于树的解析器更快地访问数据。  
  请看下面的XML片段:  
  <from>John</from>基于事件的解析器把上面的XML报告为一连串的三个事件:  
  开始元素:from  
  开始CDATA部分,值:John  
  关闭元素:from  
  上面的XML范例包含了形式良好的XML。不过这个例子是无效的XML,因为没有与它关联的文档类型声明(DTD),也没有内嵌的DTD。  
  不过,在使用Expat解析器时,这没有区别。Expat是不检查有效性的解析器,忽略任何DTD。  
  作为一款基于事件、非验证的XML解析器,Expat快速且轻巧,十分适合
PHP的web应用程序。  
  注释:XML文档必须形式良好,否则Expat会生成错误。  
  安装  
  XMLExpat解析器是
PHP核心的组成部分。无需安装就可以使用这些函数。  
  XML文件  
  将在我们的例子中使用下面的XML文件:  
  <?xmlversion="1.0"encoding="ISO-8859-1"?>  
  <note>  
  <to>George</to>  
  <from>John</from>  
  <heading>Reminder</heading>  
  <body>Don'tforgetthemeeting!</body>  
  </note>初始化XML解析器  
  我们要在PHP中初始化XML解析器,为不同的XML事件定义处理器,然后解析这个XML文件。  
  例子  
  <?php  
  //InitializetheXMLparser  
  $parser=xml_parser_create();  
  //Functiontouseatthestartofanelement  
  functionstart($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:";  
  }  
  }  
  //Functiontouseattheendofanelement  
  functionstop($parser,$element_name)  
  {  
  echo"<br/>";  
  }  
  //Functiontousewhenfindingcharacterdata  
  functionchar($parser,$data)  
  {  
  echo$data;  
  }  
  //Specifyelementhandler  
  xml_set_element_handler($parser,"start","stop");  
  //Specifydatahandler  
  xml_set_character_data_handler($parser,"char");  
  //OpenXMLfile  
  $fp=fopen("test.xml","r");  
  //Readdata  
  while($data=fread($fp,4096))  
  {  
  xml_parse($parser,$data,feof($fp))or  
  die(sprintf("XMLError:%satline%d",  
  xml_error_string(xml_get_error_code($parser)),  
  xml_get_current_line_number($parser)));  
  }  
  //FreetheXMLparser  
  xml_parser_free($parser);  
  ?>以上代码的输出:  
  --Note--  
  To:George  
  From:John  
  Heading:Reminder  
  Message:Don'tforgetthemeeting!  
  工作原理解释:  
  通过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()函数的内存