五案例解析
以下是用PHP实现读取一个以XML 格式编写的通讯录addressxml并显示其内容的示例详解见有关注释
<?
//
//第一部分几个PHPHelper函数
//
/**********************************
*从一个文件中读取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=;$i<$depth[$parser];$i++)
{
$spacer=>;
}
//设置标记显示时的颜色
if($depth[$parser]==)
{
$font_color=red;
}
else
if($depth[$parser]==)
{
$font_color=green;
}
else
{
$font_color=blue;
}
//设置标记显示时的字体
$font_size=$depth[$parser];
if ($font_size<)
{
$font_size=;
}
//显示标记
echo <font size=$font_size color=$font_color>;
echo $spacer$depth[$parser];
if ($depth[$parser]<>)
{
echo ;
}
echo $name<BR>;
echo </font>;
$depth[$parser]++;
//如果是主标记就显示红色的水平线
if($depth[$parser]==)
{
echo <hr color=red size=>;
}
}
/*********************************
*当PHP遇到一个XML的结束标记时 *
*调用其作用是改变当前的层次 *
*计数并在主标记下显示水平线 *
*********************************/
function stop_element($parser$name)
{
//变量$depth存放标记的深度
global $depth;
$depth[$parser];
//如果是主标记就显示红色的水平线
if($depth[$parser]==)
{
echo <hr color=red size=>;
}
}
/*********************************
*当PHP遇到一个XML的标记内容时 *
*调用其作用是按照一定的层次 *
*显示出标记的内容 *
*********************************/
function char_data($parser$data)
{
//变量$depth存放标记的深度
global $depth;
//显示标记的内容
$data=trim($data);
if (strlen($data))
{
for ($i=;$i<$depth[$parser]+;$i++)
echo
echo <b>$data</b><br>\n;
}
}
//
//第二部分PHP文件开始执行处
//
//要解析的XML文件的名字
$file=addressxml;
//读取文件
$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))
{
//报错
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);
?>
[] []