分类:
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();
?>