标记前所有的箭头符号
$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);
?>