放飞你的梦想--翱翔我的天空 | 会员登陆 | 繁體中文 | 站点地图 | 站长博客
 | 网站首页 | 文章中心 | IT 前沿 | 清怡画风 | 视频教程 | 资源下载 | 精彩图库 | 博客文赏 | 天空论坛 | 访客留言 | 音乐版 | 
    本站全新推出IT 前沿频道欢迎大家访问 地址 http://it.tkbbs.com  [风雪残士  2005年12月9日]            本站推出新浪VIVI收藏夹服务,欢迎使用  [风雪残士  2005年10月18日]        
您现在的位置: 翱翔翼站 >> 文章中心 >> 编程开发 >> 网页开发 >> PHP编程 >> 文章正文 今天是:
用PHP与XML联手进行网站开发 【字体:
作 者:佚名 文章来源:网络 更新:2006-5-22 17:11:29 点击:







四、PHP对XML的支持

  PHP对XML提供了的强大的支持。它使用了一个XML的“解析器”,并且为了支持这个解析器,它提供了20(PHP4)个XML的解析函数。下面是几个最常用的PHP解析函数。

  1. xml_parse

以下是引用片段:
boolean xml_parse(int parser, string data, int [isFinal]); 


  本函数用来解析 XML 格式的文件资料。参数 parser 为解析代码。参数 data 为解析的资料区块 (chunk)。参数 isFinal 可省略,若设为 true 则系统会自动送出最后的资料部分 (piece) 给 data 参数。若无错误则返回 true 值。

  2. xml_parser_create

以下是引用片段:
int xml_parser_create(string [encoding]); 


  本函数用来初始化一个新的 XML 解析器。参数 encoding 可省略,为 XML 使用的字符集,默认值为 ISO-8859-1,其它尚有 US-ASCII、UTF-8 二种。成功则返回 parser 代码供其它函数使用,失败则返回 false 值。

  3. xml_set_element_handler

以下是引用片段:
boolean xml_set_element_handler(int parser, string startElementHandler, string endElementHandler); 


  本函数配置元素的标头供 xml_parse() 函数使用。参数 parser 为解析代码。参数 startElementHandler 及 endElementHandler 分别为元素开始与结束的标头,其中的 startElementHandler 必须包括解析代码、名称、与属性,而 endElementHandler 参数包括了解析代码及名称二个参数。若无错误则返回 true 值。

  4. xml_set_character_data_handler

以下是引用片段:
boolean xml_set_character_data_handler(int parser, string handler); 


  本函数配置字符资料的标头。参数 parser 为解析代码。参数 handler 包括解析代码及资料字符串等二个元素。若无错误则返回 true 值。

  5. xml_get_error_code

以下是引用片段:
int xml_get_error_code(int parser); 


  本函数可取得 XML 在处理时的错误代码。参数 parser 为解析代码。若 parser 有错则返回 false 值,否则就返回错误代码 (如 XML_ERROR_BINARY_ENTITY_REF .... 等等)。

  6. xml_error_string

以下是引用片段:
string xml_error_string(int code); 


  本函数可取得 XML 在处理时的错误代码。参数 code 为解析错误代码。若无错误返回值为代码的文字描述字符串。

  7. xml_get_current_line_number

以下是引用片段:
int xml_get_current_line_number(int parser); 

  本函数用来取得目前 XML 解析所正在处理的行号。参数 parser 为解析代码。若 parser 有错则返回 false 值,若无错误则返回行号数字。

  8. xml_parser_free

以下是引用片段:
boolean xml_parser_free(int parser); 


  本函数用来释放目前 XML 解析所使用的内存。参数 parser 为解析代码。若没有错误则返回 true 值,否则返回 false 值。

  五、案例解析

  以下是用PHP5实现读取一个以XML 1.0格式编写的通讯录address.xml,并显示其内容的示例。详解见有关注释。

以下是引用片段:
<? 
 // 
 //第一部分:几个PHP Helper函数 
 // 

 /********************************** 

 *从一个文件中读取XML的 * 
 *内容到字符串中 * 

 *********************************/ 

function read_file($filename) 

 //读取文件 
 $lines=file($filename); 
 //变量$contents是存放文件内容的变量 
 $contents=; 
 while(list($key,$value)=each($lines)) 
 { 
  $contents.=$value; 
 } 
 return $contents; 


/********************************* 
*当PHP遇到一个XML的起始标记时 * 
*调用,其作用是按照一定的层次 * 
*显示出XML的标记 * 
*********************************/ 

function start_element($parser, $name, $attrs) 

 //变量$depth存放标记的深度 
 global $depth; 
 //变量$spacer存放标记前所有的箭头符号 
 $spacer=; 
 for ($i=1;$i<$depth[$parser];$i++) 
 { 
  $spacer.=->; 
 } 
 //设置标记显示时的颜色 
 if($depth[$parser]==0) 
 { 
  $font_color=red; 
 } 
 else 
  if($depth[$parser]==1) 
  { 
   $font_color=green; 
  } 
 else 
 { 
  $font_color=blue; 
 } 
 //设置标记显示时的字体 
 $font_size=5-$depth[$parser]; 
 if ($font_size<2) 
 { 
  $font_size=2; 
 } 
 //显示标记 
 echo <font size=.$font_size. color=.$font_color.>; 
 echo $spacer.$depth[$parser]; 
 if ($depth[$parser]<>0) 
 { 
  echo 、; 
 } 
 echo $name.<BR>; 
 echo </font>; 
 $depth[$parser]++; 
 //如果是主标记就显示红色的水平线 
 if($depth[$parser]==2) 
 { 
  echo <hr color=red size=1>; 
 } 


/********************************* 
*当PHP遇到一个XML的结束标记时 * 
*调用,其作用是改变当前的层次 * 
*计数,并在主标记下显示水平线 * 
*********************************/ 

function stop_element($parser,$name) 

 //变量$depth存放标记的深度 
 global $depth; 
 $depth[$parser]--; 
 //如果是主标记就显示红色的水平线 
 if($depth[$parser]==2) 
 { 
  echo <hr color=red size=1>; 
 } 


/********************************* 
*当PHP遇到一个XML的标记内容时 * 
*调用,其作用是按照一定的层次 * 
*显示出标记的内容 * 
*********************************/ 

function char_data($parser,$data) 

 //变量$depth存放标记的深度 
 global $depth; 
 //显示标记的内容 
 $data=trim($data); 
 if (strlen($data)) 
 { 
  for ($i=1;$i<$depth[$parser]+6;$i++) 
   echo 
   echo <b>$data</b><br>\\n; 
 } 


// 
//第二部分:PHP文件开始执行处 
// 
//要解析的XML文件的名字 

$file=address.xml; 
//读取文件 
$data=read_file($file); 

// 产生解析器的实例 
$parser = xml_parser_create(); 
// 设置处理函数 
xml_set_element_handler($parser, start_element, stop_element); 
xml_set_character_data_handler($parser, char_data); 
// 解析文件 
if(!xml_parse($parser,$data,1)) 

 //报错 
 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] [2] 



文章录入:风雪残士    责任编辑:风雪残士 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    最新文章 TOP10
    最新热门 TOP10
    最新推荐TOP10
    翱翔翼站拥有本站所有版权! Copyright © 2005 - 2008 5-IT.COM
    本站维护 :风雪残士

    浙ICP备05039908号
    努力打造国内最全的电脑技术资料库