一个用于解析xml文档的类

<?php
/**
*  类名: xmlParser
*  描述: 解析xml文件,返回数组
*  其他: 偶然
*/
class xmlParser
{
var $params = array();

//-----------------------------------------------------------------------------
    /**  BEGIN function
    *
    *   作者:偶然
    *   功能:构造初始化,打开文件并读取
    *   时间:2004.3.26
    *   变量:$file ----------- xml文件路径
    *   返回:none
    *   示例:
    *
    */
    function xmlParser($file)
    {
        $fp = @fopen($file, "r");
        if (!$fp) die("不能打开数据源");

        //读取文件
        $this->data = fread($fp, filesize($file));
        fclose($fp);
        $level = array();
        $xml_parser = xml_parser_create();

        // 将xml文件读入数组
        xml_parse_into_struct($xml_parser, $this->data, $vals, $index);
        xml_parser_free($xml_parser);

        foreach ($vals as $xml_elem)
        {
            // 元素结点展开
            if ($xml_elem['type'] == 'open')
            {
                if (array_key_exists('attributes',$xml_elem))
                {
                    list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
                }
                else
                {
                    $level[$xml_elem['level']] = $xml_elem['tag'];
                }
            }
            if ($xml_elem['type'] == 'complete')
            {
                $start_level = 1;
                $php_stmt = '$this->params';
                while($start_level < $xml_elem['level'])
                {
                    $php_stmt .= '[$level['.$start_level.']]';
                    $start_level++;
                }
                $php_stmt .= '[$xml_elem[/'tag/']] = $xml_elem[/'value/'];';
                eval($php_stmt);
            }
        }
        Return $this->params;
    }
//-----------------------------------------------------------------------------
}
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值