tangbinde 发表于 2017-4-9 14:15:30

用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"|&nbsp;&nbsp;&nbsp;&nbsp;";
if($level>0)echo"+----";

echo"<fontcolor=red>".trim($name)."&nbsp;</font>";

while(list($key,$val)=each($attrs)){//显示属性
echo"<fontcolor=green>$key=>$val</font>;&nbsp;";
}

}

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]."&nbsp;&nbsp;&nbsp;&nbsp;";
}
}

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]
查看完整版本: 用PHP&XML编制迷你搜索引擎(二)