熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

用PHP與XML聯手進行網站編程[2]

2022-06-13   來源: PHP編程 

  五案例解析

  以下是用PHP實現讀取一個以XML 格式編寫的通訊錄addressxml並顯示其內容的示例詳解見有關注釋

            <?
             //
             //第一部分幾個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=;$i<$depth[$parser];$i++)
             {
              $spacer=;
             }
             //設置標記顯示時的顏色
             if($depth[$parser]==)
             {
              $font_color=red;
             }
             else
              if($depth[$parser]==)
              {
               $font_color=green;
              }
             else
             {
              $font_color=blue;
             }
             //設置標記顯示時的字體
             $font_size=$depth[$parser];
             if ($font_size<)
             {
              $font_size=;
             }
             //顯示標記
             echo <font size=$font_size color=$font_color;
             echo $spacer$depth[$parser];
             if ($depth[$parser]<>)
             {
              echo ;
             }
             echo $name<BR>;
             echo </font>;
             $depth[$parser]++;
             //如果是主標記就顯示紅色的水平線
             if($depth[$parser]==)
             {
              echo <hr color=red size=;
             }
            }

            /*********************************
            *當PHP遇到一個XML的結束標記時 *
            *調用其作用是改變當前的層次 *
            *計數並在主標記下顯示水平線 *
            *********************************/

            function stop_element($parser$name)
            {
             //變量$depth存放標記的深度
             global $depth;
             $depth[$parser];
             //如果是主標記就顯示紅色的水平線
             if($depth[$parser]==)
             {
              echo <hr color=red size=;
             }
            }

            /*********************************
            *當PHP遇到一個XML的標記內容時 *
            *調用其作用是按照一定的層次 *
            *顯示出標記的內容 *
            *********************************/

            function char_data($parser$data)
            {
             //變量$depth存放標記的深度
             global $depth;
             //顯示標記的內容
             $data=trim($data);
             if (strlen($data))
             {
              for ($i=;$i<$depth[$parser]+;$i++)
               echo  
               echo <b>$data</b><br>\n;
             }
            }

            //
            //第二部分PHP文件開始執行處
            //
            //要解析的XML文件的名字

            $file=addressxml;
            //讀取文件
            $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))
            {
             //報錯
             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);
            ?>

[]  []  


From:http://tw.wingwit.com/Article/program/PHP/201311/21416.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.