动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   PHP → 阅读文章

 PHP中的类-操作XML(3)

作者来源: 
阅读 1070 人次 , 2006-4-18 15:26:00 

 

/* Here are the XML functions needed by expat */


   /* when expat hits an opening tag, it fires up this function */

   function startElement($parser, $name, $attrs) {

       array_push($this->current_tag, $name); // add tag to the cur. tag array

       $curtag = implode("_",$this->current_tag); // piece together tag

       /* this tracks what array index we are on for this tag */

       if(isset($this->tagtracker["$curtag"])) {
           $this->tagtracker["$curtag"]++;
       } else {
           $this->tagtracker["$curtag"]=0;
       }


       /* if there are attributes for this tag, we set them here. */

       if(count($attrs)>0) {
           $j = $this->tagtracker["$curtag"];
           if(!$j) $j = 0;

           if(!is_object($GLOBALS[$this->identifier]["$curtag"][$j])) {
               $GLOBALS[$this->identifier]["$curtag"][$j] = new xml_container;
           }

           $GLOBALS[$this->identifier]["$curtag"][$j]->store("attributes",$attrs);
               }

   } // end function startElement



   /* when expat hits a closing tag, it fires up this function */

   function endElement($parser, $name) {

       $curtag = implode("_",$this->current_tag);     // piece together tag
                               // before we pop it off,
                               // so we can get the correct
                               // cdata

       if(!$this->tagdata["$curtag"]) {
           $popped = array_pop($this->current_tag); // or else we screw up where we are
           return;     // if we have no data for the tag
       } else {
           $TD = $this->tagdata["$curtag"];
           unset($this->tagdata["$curtag"]);
       }

       $popped = array_pop($this->current_tag);
                               // we want the tag name for
                               // the tag above this, it  
                               // allows us to group the
                               // tags together in a more
                               // intuitive way.

       if(sizeof($this->current_tag) == 0) return;     // if we aren't in a tag

       $curtag = implode("_",$this->current_tag);     // piece together tag
                               // this time for the arrays

       $j = $this->tagtracker["$curtag"];
       if(!$j) $j = 0;

       if(!is_object($GLOBALS[$this->identifier]["$curtag"][$j])) {
           $GLOBALS[$this->identifier]["$curtag"][$j] = new xml_container;
       }

       $GLOBALS[$this->identifier]["$curtag"][$j]->store($name,$TD); #$this->tagdata["$curtag"]);
       unset($TD);
       return TRUE;
   }



   /* when expat finds some internal tag character data,
      it fires up this function */

   function characterData($parser, $cdata) {
       $curtag = implode("_",$this->current_tag); // piece together tag        
       $this->tagdata["$curtag"] .= $cdata;
   }


   /* this is the constructor: automatically called when the class is initialized */

   function xml($data,$identifier='xml') {  

       $this->identifier = $identifier;

       // create parser object
       $this->xml_parser = xml_parser_create();

       // set up some options and handlers
       xml_set_object($this->xml_parser,$this);
       xml_parser_set_option($this->xml_parser,XML_OPTION_CASE_FOLDING,0);
       xml_set_element_handler($this->xml_parser, "startElement", "endElement");
       xml_set_character_data_handler($this->xml_parser, "characterData");

       if (!xml_parse($this->xml_parser, $data, TRUE)) {
           sprintf("XML error: %s at line %d",
           xml_error_string(xml_get_error_code($this->xml_parser)),
           xml_get_current_line_number($this->xml_parser));
       }

       // we are done with the parser, so let's free it
       xml_parser_free($this->xml_parser);

 

   }  // end constructor: function xml()


} // thus, we end our class xml

?>

 

  
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:PHP中的类-邮件群发
· 下一篇:PHP中的类-操作XML(2)
· 用PHP函数解决SQL injection
· PHP中的类
· win2000上怎么装PHP+MYSQL
· 网上找到的两个PHP发送邮件的例子,很不错,贴出来给初学者参考吧(不知道是否有兄弟曾贴过),呵呵(1)
· PHP的面向对象编程:开发大型PHP项目的方法(五)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077