用PHP&XML编制迷你搜索引擎(三)
四、在第三章程序的基础上,可以显示一段子树。 同第二章的[url=javascript:;]代码[/url]我就不再注释了。 下面的代码是我们的迷你搜索引擎的基础。 因为,要显示出一个字类别(如程序设计->PHP->)的信息就要用到他。 我们依照元素的层数和他在当层的第几号来对他进行定位 如: links (0,1) +----web (1,1) +----sub (1,2) | +----web (2,1) | +----sub (2,2) | | +----web (3,1) | | +----sub (3,2) : : : __________________________________________________________ [/color][color=#0000cc]html> [/color][color=#0000cc]body> // [url=javascript:;]XML[/url]文件 $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($level0)echo"+----"; echo "". //加上每个元素节点的联接 trim($name)." "; while ( list( $key, $val ) = each( $attrs ) ) { echo "$key => $val; "; } } } 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 " Root"; 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); ?> [/color][color=#006600]/body> [/color][color=#006600]/html>
|