用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文件的函数
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($fp4096)) 

if(!
xml_parse($parser$datafeof($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"|&nbsp;&nbsp;&nbsp;&nbsp;";
  if(
$level-$lev>0)echo"+----";

  echo 
"<a href=$PHP_SELF?lev=$level&num=$levelcount[$level]>".  
  
//加上每个元素节点的联接
       
trim($name)."&nbsp;</a>";

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




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($parserXML_OPTION_CASE_FOLDING0); 

$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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值