快速业务通道

php的xml分析函数

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25

while($data = fread($fp, 4096)) 

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

return(false); 

fclose($fp); 

return(true); 

// 输出结果函数(方框形式)
function print_box($title, $value) 

printf("n+%''-60s+n", ""); 
printf("|%20s", "$title:"); 
printf("%14s", $value); 
printf("%26s|n", ""); 
printf("+%''-60s+n", ""); 

// 输出结果函数(行形式)
function print_line($title, $value) 

printf("%20s", "$title:"); 
printf("%15sn", $value); 

// 排序函数
function my_sort($a, $b) 

return(is_object($a) && is_object($b) ? $b->count - $a->count: 0); 

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

global $elements, $stack; 

// 元素是否已在全局$elements数组中?
if(!isset($elements[$name])) 

// 否-增加一个元素的类实例
$element = new element; 
$elements[$name] = $element; 

// 该元素的记数器加一
$elements[$name]->count++; 

// 是否有父元素?
if(isset($stack[count($stack)-1])) 

// 是-将父元素赋给$last_element
$last_element = $stack[count($stack)-1]; 

// 如果目前元素的父元素数组为空,初始化为0
if(!isset($elements[$name]->parents[$last_element])) 

$elements[$name]->parents[$last_element] = 0; 

// 该元素的父元素记数器加一
$elements[$name]->parents[$last_element]++; 

// 如果目前元素的父元素的子元素数组为空,初始化为0

if(!isset($elements[$last_element]->childs[$name])) 

$elements[$last_element]->childs[$name] = 0; 

// 该元素的父元素的子元素记数器加一
$elements[$last_element]->childs[$name]++; 

// 将目前的元素加入到栈中
array_push($stack, $name); 

function stop_element($parser, $name) 

global $stack; 

// 从栈中将最顶部的元素移去
array_pop($stack); 

function char_data($parser, $data) 

global $elements, $stack, $depth; 

// 增加目前元素的字符数目
$elements[$stack][count($stack)-1]]->chars += strlen(trim($data)); 

// 产生解析器的实例
$parser = xml_parser_create(); 

// 设置处理函数
xml_set_element_handler($parser, "start_element", "stop_element"); 
xml_set_character_data_handler($parser, "char_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); 

// 释放协助元素
unset($elements["current_element"]); 
unset($elements["last_element"]); 

// 根据元素的次数排序
uasort($elements, "my_sort"); 

// 在$elements中循环收集元素信息
while(list($name, $element) = each($elements)) 

print_box("Element na

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号