用PHP&XML编制迷你搜索引擎(三)
用PHP&XML编制迷你搜索引擎(三)四、在第三章程序的基础上,可以显示一段子树。
同第二章的代码我就不再注释了。
下面的代码是我们的迷你搜索引擎的基础。
因为,要显示出一个字类别(如程序设计->PHP->)的信息就要用到他。
我们依照元素的层数和他在当层的第几号来对他进行定位
如:
links(0,1)
+----web(1,1)
+----sub(1,2)
|+----web(2,1)
|+----sub(2,2)
||+----web(3,1)
||+----sub(3,2)
:
:
:
__________________________________________________________
<html>
<body>
<?
//XML文件
$file="demo.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)
{
global$level,$levelcount,$maxlevel,$hide,$lev,$num,$PHP_SELF;
$level+=1;
if($level>$maxlevel)$maxlevel=$level;
$levelcount[$level]+=1;
if($hide){//判断是否在子树的范围内$hide==FALSE为在
if($level==$lev&&$levelcount[$level]==$num)$hide=FALSE;
}else{
if($level<=$lev)$hide=TRUE;
}
if(!$hide){
echo"<br>";
for($i=1;$i<=($level-1-$lev);$i++)echo"| ";
if($level-$lev>0)echo"+----";
echo"<ahref=$PHP_SELF?lev=$level&num=$levelcount[$level]>".
//加上每个元素节点的联接
trim($name)." </a>";
while(list($key,$val)=each($attrs)){
echo"<fontcolor=green>$key=>$val</font>; ";
}
}
}
functionstop_element($parser,$name)
{
global$level;
$level-=1;
}
functiondata($parser,$data)
{
global$level,$hide;
if(!$hide)
if(trim($data)!=""){
echotrim($data);
}
}
//mainstart
global$hide,$lev,$num,$PHP_SELF;
$level=-1;
$hide=TRUE;
echo"<p><ahref=$PHP_SELF>Root</a></p>";
if($lev==""){$lev=0;$num=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);
?>
</body>
</html>
页:
[1]