您的位置:首页 > 编程语言 > PHP开发

用PHP&XML编制迷你搜索引擎(三)

2004-10-07 19:49 483 查看
用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文件的函数
function xml_parse_from_file($parser, $file) 
{ 
if(!file_exists($file)) 
{ 
die("Can’t find file "$file"."); 
} 

if(!($fp = @fopen($file, "r"))) 
{ 
die("Can’t open file "$file"."); 
} 

while($data = fread($fp, 4096)) 
{ 
if(!xml_parse($parser, $data, feof($fp))) 
{ 
return(false); 
} 
} 

fclose($fp); 

return(true); 
} 

function start_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 "<a href=$PHP_SELF?lev=$level&num=$levelcount[$level]>".  
  //加上每个元素节点的联接
       trim($name)." </a>";

  while ( list( $key, $val ) = each( $attrs ) ) {
    echo "<font color=green>$key => $val</font>; ";
}
 }

} 

function stop_element($parser, $name) 
{ 
global $level;

$level -= 1;
} 

function data($parser, $data)
{
global $level,$hide;
 if(!$hide)
  if(trim($data)!=""){
   echo trim($data);
 }
}

//main start
global $hide,$lev,$num,$PHP_SELF;
$level = -1;
$hide = TRUE;

echo "<p><a href=$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("XML error: %s at line %d", 
xml_error_string(xml_get_error_code($parser)), 
xml_get_current_line_number($parser))); 
} 

xml_parser_free($parser); 

?> 
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息