PHP中的类-操作XML(3)

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 
/* 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

?>

 

时间: 2024-10-05 10:58:38

PHP中的类-操作XML(3)的相关文章

限制程序中某类操作的执行次数的算法设计及C代码实现

需求描述 编写程序实现限制程序中某类操作的执行次数的需求.为了便于说明,要求程序每天创建一个与上一天不同的文件目录.如果欲创建的文件目录已存在,则不用再创建.文件目录的命名格式为:FileDir_YYYYMMDD,如:FileDir_20160830. 程序流程 对于此类需求,最关键的问题是要设定一个标识来限制操作的执行次数.也就是说,当程序执行完一次操作之后,要有机制来限制它执行第二次操作. 因为本需求要求每天执行一次操作,所有我们自然想到了用日期来限制程序的执行次数.我们可以用一个全局时间变

sql server中使用T-Sql操作Xml数据

一.前言 SQLServer 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB). 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中. 随着SQL Server 对XML字段的支持,相应的,T-S

java中四种操作xml方式的比较

xml|比较   1. 介绍 1)DOM(JAXP Crimson解析器)         DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还

C#中TreeView类操作全攻略(一)

treeview|攻略 using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using com.prm.client.tools;using System.Data.OracleClient;using com.prm.client.common;using com.prm.client

今天看到一个很好的类-操作xml的!贴出来给大家,不知道以前贴过没有?

xml <?/*     (c) 2000 Hans Anderson Corporation.  All Rights Reserved.     You are free to use and modify this class under the same     guidelines found in the PHP License.     -----------     bugs/me:     http://www.hansanderson.com/php/     me@hans

C#中TreeView类操作全攻略(二)

treeview|攻略 using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using com.prm.client.tools;using System.Data.OracleClient;//using com.prm.client.common; namespace com.prm

winfor中在treeview操作XML节点添加删除操作问题 求助!!!

问题描述 //删除节点按钮privatevoidbutton3_Click(objectsender,EventArgse){try{TreeNodeactiveNode=treeView1.SelectedNode;if(activeNode==null){return;}#region删除当前选择的节点XmlNodexmlNode=activeNode.TagasXmlNode;XmlNodeparentNode=xmlNode.ParentNode;if(parentNode==null)

C#中TreeView类操作全攻略(三)

treeview|攻略 using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using com.prm.client.tools;using System.Data.OracleClient;//using com.prm.client.common; namespace com.prm.client.forms{ ///

C#操作XML增删改查

原文:C#操作XML增删改查 XML文件是一种常用的文件格式,不管是B/S还是C/S都随处可见XML的身影.Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具.XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用.微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件.     "在程序中访问进而操作XML文件一般有两种模型,分

JDOM操作XML文档

  解析 xml文档的接口技术有很多 ,DOM  JDOM  SAX  ..其中JDOM技术是最简单的操作,代码操作比DOM  SAX少很多 . 关于这三种技术的介绍可以去网上查询一下. SAX是基于事件响应的 (没用过) . DOM是java官方的标准,我们在操作xml的时候其实是在内存中构建了一棵文档树,对于较小的xml文档可以使用dom处理,但是对于数据量比较大的XML文档,DOM比较耗费内存. JDOM是一个开源的项目,融合了DOM和SAX技术 ,轻量级的API可以方便的操作XML文档,