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

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

三、一个最简单的用PHP显示XML的范例

下面的程序是将解析XML并按照树形结构输出至浏览器,并显示每层的元素总数。
__________________________________________________________

<?


$file 
"demo.xml";// 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)
 
//遇到了开元素标记如<a href="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 
"<font color=red>".trim($name)."&nbsp;</font>";

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



function 
stop_element($parser$name
 
//遇到了开元素标记如</body>就执行这一段,

global 
$level;

$level -= 1;


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

function 
showcount()  //显示每一层的元素总数
{
  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($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); 


showcount();

?> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值