技术开发 频道

用PHP与XML联手进行网站编程

  五、案例解析

  以下是用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.="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

 }

 //设置标记显示时的颜色

 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 "&nbsp";

   echo "<b>$data</b><br>\n";

 }

}


//第二部分:PHP文件开始执行处

//要解析的XML文件的名字

$file="xml1.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);

?>

0
相关文章