收藏本页 | 网站地图 | 投稿指南
 
 
当前位置:首页 >> 学院首页 >> 程序开发 >> PHP >>

用PHP与XML联手进行网站开发

放大字体  缩小字体  At: 2006-05-23 21:30  By: master8 转载 来源: 互联网

  五、案例解析

  以下是用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);
?>

 






         









 
Google
论坛精华  
网站运营
站长学院
 
 
  ©2005-2008 站长吧 Master8.NET All Rights Reserved 陕ICP备05010609号