一个用于解析xml文档的类

网络整理 - 07-27

<?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;
    }
//-----------------------------------------------------------------------------
}
?>