热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用PHP5.0轻松解析XML文档(2)_php

文件:SimpleDocumentParser.php<?php*****@authorhahawen(大龄青年)*@since2004-12-04*@copyrightCopyr

文件:SimpleDocumentParser.php

<?php/** *========================================================= * * @author     hahawen(大龄青年)   * @since      2004-12-04 * @copyright  Copyright (c) 2004, NxCoder Group * *========================================================= *//** * class SimpleDocumentParser * use SAX parse xml file, and build SimpleDocumentObject * all this pachage's is work for xml file, and method is action as DOM. * * @package SmartWeb.common.xml * @version 1.0 */class SimpleDocumentParser{ private $domRootObject = null; private $currentNO = null; private $currentName = null; private $currentValue = null; private $currentAttribute = null; public function getSimpleDocument() {     return $this->domRootObject; } public function parse($file) {        $xmlParser = xml_parser_create();     xml_parser_set_option($xmlParser,XML_OPTION_CASE_FOLDING, 0);     xml_parser_set_option($xmlParser,XML_OPTION_SKIP_WHITE, 1);     xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, 'UTF-8');     xml_set_object($xmlParser, $this);     xml_set_element_handler($xmlParser, "startElement", "endElement");     xml_set_character_data_handler($xmlParser, "characterData");        if (!xml_parse($xmlParser, file_get_contents($file)))            die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xmlParser)),
        xml_get_current_line_number($xmlParser))); xml_parser_free($xmlParser); } private function startElement($parser, $name, $attrs) { $this->currentName = $name; $this->currentAttribute = $attrs; if($this->currentNO == null) { $this->domRootObject = new SimpleDocumentRoot($name); $this->currentNO = $this->domRootObject; } else { $this->currentNO = $this->currentNO->createNode($name, $attrs); } } private function endElement($parser, $name) { if($this->currentName==$name) { $tag = $this->currentNO->getSeq(); $this->currentNO = $this->currentNO->getPNodeObject(); if($this->currentAttribute!=null && sizeof($this->currentAttribute)>0) $this->currentNO->setValue($name, array('value'=>$this->currentValue,
       'attrs'=>$this->currentAttribute)); else $this->currentNO->setValue($name, $this->currentValue); $this->currentNO->removeNode($tag); } else { $this->currentNO = (is_a($this->currentNO, 'SimpleDocumentRoot'))? null:
        $this->currentNO->getPNodeObject(); } } private function characterData($parser, $data) { $this->currentValue = iconv('UTF-8', 'GB2312', $data); } function __destruct() { unset($this->domRootObject); }}?>

http://www.gaodaima.com/44981.html使用PHP 5.0 轻松解析xml文档(2)_php

  文件:SimpleDocumentBase.php

<?php/** *========================================================= * * @author     hahawen(大龄青年)   * @since      2004-12-04 * @copyright  Copyright (c) 2004, NxCoder Group * *========================================================= *//** * abstract class SimpleDocumentBase * base class for xml file parse * all this pachage's is work for xml file, and method is action as DOM. * * 1/ add/update/remove data of xml file. * 2/ explode data to array. * 3/ rebuild xml file * * @package SmartWeb.common.xml * @abstract * @version 1.0 */abstract class SimpleDocumentBase{ private $nodeTag = null; private $attributes = array(); private $values = array(); private $nodes = array();    function __construct($nodeTag)    {        $this->nodeTag = $nodeTag;    }    public function getNodeTag()    {     return $this->nodeTag;    }    public function setValues($values){     $this->values = $values;    }    public function setValue($name, $value)    {     $this->values[$name] = $value;    }    public function getValue($name=null)    {     return $name==null? $this->values: $this->values[$name];    }    public function removeValue($name)    {     unset($this->values["$name"]);    }    public function setAttributes($attributes){        $this->attributes = $attributes;    }    public function setAttribute($name, $value)    {     $this->attributes[$name] = $value;    }    public function getAttribute($name=null)    {        return $name==null? $this->attributes: $this->attributes[$name];    }    public function removeAttribute($name)    {     unset($this->attributes["$name"]);    }    public function getNodesSize()    {        return sizeof($this->nodes);    }    protected function setNode($name, $nodeId)    {     $this->nodes[$name] = $nodeId;    }    public abstract function createNode($name, $attributes);    public abstract function removeNode($name);    public abstract function getNode($name=null);    protected function getNodeId($name=null)    {     return $name==null? $this->nodes: $this->nodes[$name];    }    protected function createNodeByName($rootNodeObj, $name, $attributes, $pId)    {        $tmpObject = $rootNodeObj->createNodeObject($pId, $name, $attributes);        $key = isset($attributes[id])? $name.'_'.$attributes[id]: $name.'_'.$this->getNodesSize();        $this->setNode($key, $tmpObject->getSeq());     return $tmpObject;    }    protected function removeNodeByName($rootNodeObj, $name)    {        $rootNodeObj->removeNodeById($this->getNodeId($name));        if(sizeof($this->nodes)==1)            $this->nodes = array();     else      unset($this->nodes[$name]);    }    protected function getNodeByName($rootNodeObj, $name=null)    {     if($name==null)     {            $tmpList = array();            $tmpIds = $this->getNodeId();            foreach($tmpIds as $key=>$id)             $tmpList[$key] = $rootNodeObj->getNodeById($id);            return $tmpList;     }     else     {      $id = $this->getNodeId($name);      if($id===null)      {             $tmpIds = $this->getNodeId();             foreach($tmpIds as $tkey=>$tid)             {              if(strpos($key, $name)==0)              {               $id = $tid;               break;              }             }      }      return $rootNodeObj->getNodeById($id);     }    }    public function findNodeByPath($path)    {     $pos = strpos($path, '|');     if($pos<=0)     {      return $this->getNode($path);        }        else        {         $tmpObj = $this->getNode(substr($path, 0, $pos));         return is_object($tmpObj)? $tmpObj->findNodeByPath(substr($path, $pos+1)): null;        }    }    public function getSaveData()    {        $data = $this->values;        if(sizeof($this->attributes)>0)         $data[attrs] = $this->attributes;        $nodeList = $this->getNode();        if($nodeList==null)         return $data;        foreach($nodeList as $key=>$node)        {         $data[$key] = $node->getSaveData();        }     return $data;    }    public function getSaveXml($level=0)    {     $prefixSpace = str_pad("", $level, "/t");     $str = "$prefixSpace<$this->nodeTag";        foreach($this->attributes as $key=>$value)         $str .= " $key=/"$value/"";        $str .= ">/r/n";        foreach($this->values as $key=>$value){            if(is_array($value))            {                $str .= "$prefixSpace/t<$key";                foreach($value[attrs] as $attkey=>$attvalue)                 $str .= " $attkey=/"$attvalue/"";                $tmpStr = $value[value];            }            else            {             $str .= "$prefixSpace/t<$key";             $tmpStr = $value;            }            $tmpStr = trim(trim($tmpStr, "/r/n"));            $str .= ($tmpStr===null || $tmpStr==="")? " />/r/n": ">$tmpStr</$key>/r/n";        }        foreach($this->getNode() as $node)         $str .= $node->getSaveXml($level+1)."/r/n";     $str .= "$prefixSpace</$this->nodeTag>";     return $str;    }    function __destruct()    {     unset($this->nodes, $this->attributes, $this->values);    }}?>      

欢迎大家阅读《使用PHP 5.0 轻松解析XML文档(2)_php》,跪求各位点评,若觉得好的话请收藏本文,by



推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • java布尔字段用is前缀_POJO类中布尔类型的变量都不要加is前缀详解
    前言对应阿里巴巴开发手册第一章的命名风格的第八条。【强制】POJO类中布尔类型的变量都不要加is前缀,否则部分框架解析会引起序列化错误。反例:定义为基本 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
author-avatar
死神邀请我
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有