Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18680206
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类:

2008-04-16 15:09:08

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



下面的程序是将解析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($fp, 4096))

{

if(!xml_parse($parser, $data, feof($fp)))

{

return(false);

}

}



fclose($fp);



return(true);

}







function start_element($parser, $name, $attrs)

//遇到了开元素标记如就执行这一段,

//$name=a,$attrs为一个属性数组

{

global $level,$levelcount,$maxlevel;



$level += 1;

if($level>$maxlevel)$maxlevel=$level;

$levelcount[$level]+=1;

echo "

";

for($i=1;$i<=($level-1);$i++)echo"|    ";

if($level>0)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;

if(trim($data)!=""){

echo trim($data);

}

}



function showcount() //显示每一层的元素总数

{

global $maxlevel,$levelcount;

echo "

";

for ($i=0;$i<=$maxlevel;$i++){

echo $levelcount[$i]."    ";

}

}



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("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();



?>

阅读(360) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~