说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请问这个文件xml.php代码附后是不是用来处理xml文件的?谢谢

编辑:说三道四文库 发布时间:2017-09-26 06:34
HTML文档下载 WORD文档下载 PDF文档下载
如题 

代码如下:

<?php 
class SofeeXmlParser { 
     
    /** 
    * XML parser handle 
    * 
    * @var        resource 
    * @see        xml_parser_create() 
    */ 
    var $parser; 

    /** 
    * source encoding 
    * 
    * @var        string 
    */ 
    var $srcenc; 

    /** 
    * target encoding 
    * 
    * @var        string 
    */ 
    var $dstenc; 

    /** 
    * the original struct 
    * 
    * @access    private 
    * @var        array 
    */ 
    var $_struct = array(); 

    /** 
    * Constructor 
    * 
    * @access        public 
    * @param        mixed        [$srcenc] source encoding 
    * @param        mixed        [$dstenc] target encoding 
    * @return        void 
    * @since         
    */ 
    function SofeeXmlParser($srcenc = null, $dstenc = null) { 
        $this->srcenc = $srcenc; 
        $this->dstenc = $dstenc; 
         
        // initialize the variable. 
        $this->parser = null; 
        $this->_struct = array(); 
    } 

    /** 
    * Free the resources 
    * 
    * @access        public 
    * @return        void 
    **/ 
    function free() { 
        if (isset($this->parser) && is_resource($this->parser)) { 
            xml_parser_free($this->parser); 
            unset($this->parser); 
        } 
    } 

    /** 
    * Parses the XML file 
    * 
    * @access        public 
    * @param        string        [$file] the XML file name 
    * @return        void 
    * @since         
    */ 
    function parseFile($file) { 
        $data = @file_get_contents($file);
        $data = $data!=""?$data:file_get_contents("IP.xml");
        $this->parseString($data);                    
    } 

    /** 
    * Parses a string. 
    * 
    * @access        public 
    * @param        string        [$data] XML data 
    * @return        void 
    */ 
    function parseString($data) { 
        if ($this->srcenc === null) { 
            $this->parser = @xml_parser_create() or die('Unable to create XML parser resource.'); 
        } else { 
            $this->parser = @xml_parser_create($this->srcenc) or die('Unable to create XML parser resource with '. $this->srcenc .' encoding.'); 
        } 
         
        if ($this->dstenc !== null) { 
            @xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, $this->dstenc) or die('Invalid target encoding'); 
        } 
        xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);    // lowercase tags 
        xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1);        // skip empty tags 
        
        // 这里是我人为屏蔽的 lino 2006/11/24
        if (!xml_parse_into_struct($this->parser, $data, &$this->_struct)) { 
            printf("XML error: %s at line %d",  
                    xml_error_string(xml_get_error_code($this->parser)),  
                    xml_get_current_line_number($this->parser) 
            ); 
            $this->free(); 
            exit(); 
        } 
         

        $this->_count = count($this->_struct); 
        $this->free(); 
    } 

    /** 
    * return the data struction 
    * 
    * @access        public 
    * @return        array 
    */ 
    function getTree() { 
        $i = 0; 
        $tree = array(); 

        $tree = $this->addNode( 
            $tree,  
            $this->_struct[$i]['tag'],  
            (isset($this->_struct[$i]['value'])) ? $this->_struct[$i]['value'] : '',  
            (isset($this->_struct[$i]['attributes'])) ? $this->_struct[$i]['attributes'] : '',  
            $this->getChild($i) 
        ); 

        unset($this->_struct); 
        return ($tree); 
    } 

    /** 
    * recursion the children node data 
    * 
    * @access        public 
    * @param        integer        [$i] the last struct index 
    * @return        array 
    */ 
    function getChild(&$i) { 
        // contain node data 
        $children = array(); 

        // loop 
        while (++$i < $this->_count) { 
            // node tag name 
            $tagname = $this->_struct[$i]['tag']; 
            $value = isset($this->_struct[$i]['value']) ? $this->_struct[$i]['value'] : ''; 
            $attributes = isset($this->_struct[$i]['attributes']) ? $this->_struct[$i]['attributes'] : ''; 

            switch ($this->_struct[$i]['type']) { 
                case 'open': 
                    // node has more children 
                    $child = $this->getChild($i); 
                    // append the children data to the current node 
                    $children = $this->addNode($children, $tagname, $value, $attributes, $child); 
                    break; 
                case 'complete': 
                    // at end of current branch 
                    $children = $this->addNode($children, $tagname, $value, $attributes); 
                    break; 
                case 'cdata': 
                    // node has CDATA after one of it's children 
                    $children['value'] .= $value; 
                    break; 
                case 'close': 
                    // end of node, return collected data  
                    return $children; 
                    break; 
            } 
         
        } 
        //return $children; 
    } 

    /** 
    * Appends some values to an array 
    * 
    * @access        public 
    * @param        array        [$target] 
    * @param        string        [$key] 
    * @param        string        [$value] 
    * @param        array        [$attributes] 
    * @param        array        [$inner] the children 
    * @return        void 
    * @since         
    */ 
    function addNode($target, $key, $value = '', $attributes = '', $child = '') { 
        if (!isset($target[$key]['value']) && !isset($target[$key][0])) { 
            if ($child != '') { 
                $target[$key] = $child; 
            } 
            if ($attributes != '') { 
                foreach ($attributes as $k => $v) { 
                    $target[$key][$k] = $v; 
                } 
            } 
             
            $target[$key]['value'] = $value; 
        } else { 
            if (!isset($target[$key][0])) { 
                // is string or other 
                $oldvalue = $target[$key]; 
                $target[$key] = array(); 
                $target[$key][0] = $oldvalue; 
                $index = 1; 
            } else { 
                // is array 
                $index = count($target[$key]); 
            } 

            if ($child != '') { 
                $target[$key][$index] = $child; 
            } 

            if ($attributes != '') { 
                foreach ($attributes as $k => $v) { 
                    $target[$key][$index][$k] = $v; 
                } 
            } 
            $target[$key][$index]['value'] = $value; 
        } 
        return $target; 
    } 

}
XML parser handle 

写的很清楚啊 。是的。
粗看了一下,是做xml处理的一个类
从Google、Apple、Dropbox、Twitter和Square学到的管理哲学 软件开发就像炒股,关键看你怎么选股票! iOS 7.1正式版:新增CarPlay连接功能、完美支持iPhone 4 【OSTC讲师专访】马全一:Docker,Hadoop的竞争者来了! 福布斯:全球那些富可敌国的科技大佬们 抢工作、争资源,如此聪明的AI你拿什么阻止? iUI:移动Web应用开发必备的开源框架 支持iOS 7.1!苹果发布Xcode 5.1更新 视频云将成为2014年乐视新的发力点 3月12日:万维网迎来理念诞生25周年 《近匠》云适配CEO陈本峰:跨屏移动,曲线一样救国 Intel陈荣坤:赢取移动市场的几个先决条件 而立之年,开发者在害怕什么? 首席工程师揭秘:LinkedIn大数据后台是如何运作的 年交易额1800亿美元,揭秘PayPal成功背后的三大热门技术 微软妥协Android?向该平台推开源Office 365 SDK 中国云计算大会PPT集萃(一):众多名家分享技术挑战与行业趋势 速度是现在的10000倍,出自物理学家之手的新型电脑 逗你玩?淘宝开放平台从4月1起开始全面收费 出现编程疲劳?千万别纠结 “编程竞赛界王子”教你更好的招聘程序员 SA:三星全球智能电视市场份额达26% Cocos2d-x 3.0分语言包发布 最新进展即将披露 友盟:社会化分享成为APP开发“标准配置” 从“简单”的封面设计剖析Netflix背后的数据哲学 与Linus Torvalds“并列”,虚拟化天才程序员法布里斯贝拉 让超级计算机和数据中心“飞”,Intel推800Gbps神器MXC 【OSTC讲师专访】Debian开发者李道兵:平静地理解开源 红帽推出开源业务流程管理套件:JBoss BPM Suite 6 科学研究证明:程序员快乐才能更好的工作 ChocolateChip-UI:能“逆转”的跨平台应用开发框架 如何往串口的发送脚送出一个持续10ms的低电平? IIS6中文件上传程序为何只能传小于200K的文件? 在win中删除了桌面快捷方式,怎么恢复??求助! 大虾们图书管理系统中图书与管理员表到底要不要建关系 请教模糊查询,!!!!! 怎么样用asp实现阴历的查询??? 请高手赐教!! 大家帮忙:为什么我在调试程序时不能跟踪进入VCL的方法代码? JSP调用session的问题? ....同一用户不能同时在线两次的完整解决方法......在线等 批量数据提交 cqzyf 接分 1 问个VC6.0里面的1个小问题! 怎样使一个按钮成为默认按钮? 小问题,高分请教用滑动条制作的调色板问题。 在Asp怎样连接Access数据库? 跳线 高分求DELPHI4.0中的哪个做安装程序的工具,只要这个版本的! 难道是Delphi6的Bug吗?还望遇到过这样问题的大哥多多指教! 怎样实现要最新的信息? 一个疑惑的问题? 此觸發器該如何寫 关于数据库更新的问题!帮帮忙,50分就是你的啦! easy问题送大分,DLL中的资源,马上结贴 菜鸟刚学vc.net,新建了一个dialog based,只有一个窗体,我在窗体上放一个按钮,这就是我的程序了,运行之后生成了可执行文件,我把他拷 不明白交换机的网管功能? 请问:如何将richtextbox中显示的内容转换成图像信息?(急) 请各位同志帮我看看这段程序: 谢谢! 没有免费的午餐.各位求救.dbf文件损坏,如何修复(没有带.cdx文件) 在线等!急急急!!! 请大家帮忙 急需解决!!!!! 一个简单的问题,请帮忙 请教!如何用非模式对话框实现面板? 请问高手,这样是否可行? 是不是真的要我去当内裤了呀~~~~~~~~~~~~~在线等待!~!~!~! 请各位大侠帮忙:要在Excel中实现以下功能 如何往串口的发送脚送出一个持续10ms的低电平? 如何实现有些项输出到打印机,有些项输出到显示器,也就是有预览时能看到,而打印时不把他打印出来. ★紧急求助!!如何在CListCtrl中的非第一列贴图?或者设个标记?在线等待!★ memset、memcopy\memget等都是干什么的怎么用?? dropDownList的异常现象?????? 如何改变EventLog中Source和自定义Log的对应关系? 紧急求助,在线等待。 为什么无法实现? 请问vc60.idb和vc60.pdb是干什么用的? dreamweaver Mx再繁體系統中的使用 乱码问题!请高手赐教!! 请问在jsp中如何连接access数据库? 你愿意赐教吗? w3svc记录的时间跟系统时间不一致? 谁能告诉我在哪儿可以下载到微软BHO的例子? 一个弄了很长时间的问题,高手过来看看。。 自驾瘾发作? 跟着这份浙江自驾游地图国家发改委:淘汰落后产能 地方政府是四川一名镇长上班看《新白娘子传奇》被象山下调住房公积金最高贷款限额26岁小伙车祸后脑死亡 家属捐出其心外交部批驳CNN纵容恐怖分子“透明化”监听时代可能会来CNN同情恐怖分子外交部强烈不满北京青年驾着帆船去南极结婚【高清组图北约演习太逼真曾险些引发核战世界俄罗斯人民大会授予普京捍卫大国地美国务卿称沙特系中东领导 两国关系须挪威一公交车遭持刀男子挟持 造成3人美国一州立大学遭持枪者闯入 警方已将斯诺登谴责美英情报机构为“最恶劣的侵叙政府称:日内瓦会议旨在让总统下台则穆尔西受审 拒穿囚服大闹法庭(图)斯诺登求美“宽大处理”被拒 在俄与德叙政府称:日内瓦会议旨在让总统下台则挪威一公交车遭持刀男子挟持 造成3人博尔特自爆在北京拒吃中餐 吃了100又失大将!经纪人确定小莫退役 骑士一用工匠精神提升服务品质大美荆楚,跳动绿色音符美联储暂不加息市场回暖图文:美国加州旅游巴士发生车祸促进物流业“降本增效”沙市婴童装产业带搭上阿里快车比利时旧矿区上的钢铁迷宫(图)哥伦比亚政府与“哥伦比亚革命武装力量武汉“城市合伙人”约会全球“天使”6起“三假”案件曝光展现湖北人的精气神湖北省华侨权益保护条例依企业功能分三类实施展现湖北人的精气神警方回应“3年不还尸体”:家属索赔3两代一姐“比帅” 张帅笑到最后中国越野拉力赛包头上演双雄争霸百姓乒王·黄金大赛广州站落幕前三名分享18万元奖金安倍对中日关系表态有变 施政演说不提
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘