用PHP&XML编制迷你搜索引擎(二)
用PHP&XML编制迷你搜索引擎(二)三、一个最简单的用PHP显示XML的范例
下面的程序是将解析XML并按照树形结构输出至浏览器,并显示每层的元素总数。
__________________________________________________________
<?
$file="demo.xml";//XML文件
//解析XML文件的函数
functionxml_parse_from_file($parser,$file)
{
if(!file_exists($file))
{
die("Can’tfindfile"$file".");
}
if(!($fp=@fopen($file,"r")))
{
die("Can’topenfile"$file".");
}
while($data=fread($fp,4096))
{
if(!xml_parse($parser,$data,feof($fp)))
{
return(false);
}
}
fclose($fp);
return(true);
}
functionstart_element($parser,$name,$attrs)
//遇到了开元素标记如<ahref="link">就执行这一段,
//$name=a,$attrs为一个属性数组
{
global$level,$levelcount,$maxlevel;
$level+=1;
if($level>$maxlevel)$maxlevel=$level;
$levelcount[$level]+=1;
echo"<br>";
for($i=1;$i<=($level-1);$i++)echo"| ";
if($level>0)echo"+----";
echo"<fontcolor=red>".trim($name)." </font>";
while(list($key,$val)=each($attrs)){//显示属性
echo"<fontcolor=green>$key=>$val</font>; ";
}
}
functionstop_element($parser,$name)
//遇到了开元素标记如</body>就执行这一段,
{
global$level;
$level-=1;
}
functiondata($parser,$data)
{
global$level;
if(trim($data)!=""){
echotrim($data);
}
}
functionshowcount()//显示每一层的元素总数
{
global$maxlevel,$levelcount;
echo"<br>";
for($i=0;$i<=$maxlevel;$i++){
echo$levelcount[$i]." ";
}
}
global$level,$levelcount,$maxlevel;
$level=-1;
//产生解析器的实例
$parser=xml_parser_create();
//设置处理函数
xml_set_element_handler($parser,"start_element","stop_element");
xml_set_character_data_handler($parser,"data");
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
//解析文件
$ret=xml_parse_from_file($parser,$file);
if(!$ret)
{
die(sprintf("XMLerror:%satline%d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
//释放解析器
xml_parser_free($parser);
showcount();
?>
页:
[1]