用PHP与XML联手进行网站编程[2]

Posted on 2007-02-03 11:31 草原的天空 阅读(101) 评论(0)  编辑 收藏 引用 网摘 所属分类: PHP

五、案例解析

  以下是用PHP5实现读取一个以XML 1.0格式编写的通讯录address.xml,并显示其内容的示例。详解见有关注释。

            <?
             //
             //第一部分:几个PHP Helper函数
             //

             /**********************************

             *从一个文件中读取XML的 *
             *内容到字符串中 *

             *********************************/

            function read_file($filename)
            {
             //读取文件
             $lines=file($filename);
             //变量$contents是存放文件内容的变量
             $contents="";
             while(list($key,$value)=each($lines))
             {
              $contents.=$value;
             }
             return $contents;
            }

            /*********************************
            *当PHP遇到一个XML的起始标记时 *
            *调用,其作用是按照一定的层次 *
            *显示出XML的标记 *
            *********************************/

            function start_element($parser, $name, $attrs)
            {
             //变量$depth存放标记的深度
             global $depth;
             //变量$spacer存放标记前所有的箭头符号
             $spacer="";
             for ($i=1;$i<$depth[$parser];$i++)
             {
              $spacer.="->";
             }
             //设置标记显示时的颜色
             if($depth[$parser]==0)
             {
              $font_color="red";
             }
             else
              if($depth[$parser]==1)
              {
               $font_color="green";
              }
             else
             {
              $font_color="blue";
             }
             //设置标记显示时的字体
             $font_size=5-$depth[$parser];
             if ($font_size<2)
             {
              $font_size=2;
             }
             //显示标记
             echo "<font size=".$font_size." color=".$font_color.">";
             echo $spacer.$depth[$parser];
             if ($depth[$parser]<>0)
             {
              echo "、";
             }
             echo $name."<BR>";
             echo "</font>";
             $depth[$parser]++;
             //如果是主标记就显示红色的水平线
             if($depth[$parser]==2)
             {
              echo "<hr color=red size=1>";
             }
            }

            /*********************************
            *当PHP遇到一个XML的结束标记时 *
            *调用,其作用是改变当前的层次 *
            *计数,并在主标记下显示水平线 *
            *********************************/

            function stop_element($parser,$name)
            {
             //变量$depth存放标记的深度
             global $depth;
             $depth[$parser]--;
             //如果是主标记就显示红色的水平线
             if($depth[$parser]==2)
             {
              echo "<hr color=red size=1>";
             }
            }

            /*********************************
            *当PHP遇到一个XML的标记内容时 *
            *调用,其作用是按照一定的层次 *
            *显示出标记的内容 *
            *********************************/

            function char_data($parser,$data)
            {
             //变量$depth存放标记的深度
             global $depth;
             //显示标记的内容
             $data=trim($data);
             if (strlen($data))
             {
              for ($i=1;$i<$depth[$parser]+6;$i++)
               echo "&nbsp";
               echo "<b>$data</b><br>\n";
             }
            }

            //
            //第二部分:PHP文件开始执行处
            //
            //要解析的XML文件的名字

            $file="address.xml";
            //读取文件
            $data=read_file($file);

            // 产生解析器的实例
            $parser = xml_parser_create();
            // 设置处理函数
            xml_set_element_handler($parser, "start_element", "stop_element");
            xml_set_character_data_handler($parser, "char_data");
            // 解析文件
            if(!xml_parse($parser,$data,1))
            {
             //报错
             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);
            ?>


    转http://develop.csai.cn/web/200702021132021615.htm


只有注册用户登录后才能发表评论。
网站导航: