node.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 320 行

PHP
320
字号
<?php//// +----------------------------------------------------------------------+// | PHP Version 4                                                        |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2002 The PHP Group                                |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license,      |// | that is bundled with this package in the file LICENSE, and is        |// | available at through the world-wide-web at                           |// | http://www.php.net/license/2_02.txt.                                 |// | If you did not receive a copy of the PHP license and are unable to   |// | obtain it through the world-wide-web, please send a note to          |// | license@php.net so we can mail you a copy immediately.               |// +----------------------------------------------------------------------+// | Authors: Bernd R鰉er <berndr@bonn.edu>                               |// |          Sebastian Bergmann <sb@sebastian-bergmann.de>               |// |          Christian K黨n <ck@chkuehn.de> (escape xml entities)        |// +----------------------------------------------------------------------+//// $Id: Node.php,v 1.8 2002/05/17 12:17:18 cox Exp $///*** PEAR::XML_Tree_Node** @author  Bernd R鰉er <berndr@bonn.edu>* @package XML_Tree* @version 1.0  16-Aug-2001*/class XML_Tree_Node {    /**    * Attributes of this node    *    * @var  array    */    var $attributes;    /**    * Children of this node    *    * @var  array    */    var $children;    /**    * Content    *    * @var  string    */    var $content;    /**    * Name    *    * @var  string    */    var $name;    /**    * Constructor    *    * @param  string  name    * @param  string  content    * @param  array   attributes    */    function XML_Tree_Node($name, $content = '', $attributes = array()) {        $this->attributes = $attributes;        $this->children   = array();        $this->set_content($content);        $this->name       = $name;    }    /**    * Adds a child node to this node.    *    * @param  mixed   child    * @param  string  content    * @param  array   attributes    * @return object  reference to new child node    */    function &addChild($child, $content = '', $attributes = array()) {        $index = sizeof($this->children);        if (is_object($child)) {            if (strtolower(get_class($child)) == 'xml_tree_node') {                $this->children[$index] = $child;            }            if (strtolower(get_class($child)) == 'xml_tree' && isset($child->root)) {                $this->children[$index] = $child->root->get_element();            }        } else {            $this->children[$index] = new XML_Tree_Node($child, $content, $attributes);        }        return $this->children[$index];    }    /**    * @deprecated    */    function &add_child($child, $content = '', $attributes = array()) {        return $this->addChild($child, $content, $attributes);    }    /**    * clone node and all its children (recursive)    *    * @return object reference to the clone-node    */    function &clone() {        $clone=new XML_Tree_Node($this->name,$this->content,$this->attributes);        $max_child=count($this->children);        for($i=0;$i<$max_child;$i++) {            $clone->children[]=$this->children[$i]->clone();        }        /* for future use....            // clone all other vars            $temp=get_object_vars($this);            foreach($temp as $varname => $value)                if (!in_array($varname,array('name','content','attributes','children')))                    $clone->$varname=$value;        */        return($clone);    }    /**    * inserts child ($child) to a specified child-position ($pos)    *    * @return  inserted node    */    function &insertChild($path,$pos,&$child, $content = '', $attributes = array()) {        // direct insert of objects useing array_splice() faild :(        array_splice($this->children,$pos,0,'dummy');        if (is_object($child)) { // child offered is not instanziated            // insert a single node            if (strtolower(get_class($child)) == 'xml_tree_node') {                $this->children[$pos]=&$child;            }            // insert a tree i.e insert root-element            if (strtolower(get_class($child)) == 'xml_tree' && isset($child->root)) {                $this->children[$pos]=$child->root->get_element();            }        } else { // child offered is not instanziated            $this->children[$pos]=new XML_Tree_Node($child, $content, $attributes);        }        return($this);    }    /**    * @deprecated    */    function &insert_child($path,$pos,&$child, $content = '', $attributes = array()) {        return $this->insertChild($path,$pos,$child, $content, $attributes);    }    /**    * removes child ($pos)    *    * @param integer pos position of child in children-list    *    * @return  removed node    */    function &removeChild($pos) {        // array_splice() instead of a simple unset() to maintain index-integrity        return(array_splice($this->children,$pos,1));    }    /**    * @deprecated    */    function &remove_child($pos) {        return $this->removeChild($pos);    }    /**    * Returns text representation of this node.    *    * @return  string  xml    */    function &get()    {        static $deep = -1;        static $do_ident = true;        $deep++;        if ($this->name !== null) {            $ident = str_repeat('  ', $deep);            if ($do_ident) {                $out = $ident . '<' . $this->name;            } else {                $out = '<' . $this->name;            }            foreach ($this->attributes as $name => $value) {                $out .= ' ' . $name . '="' . $value . '"';            }            $out .= '>' . $this->content;            if (sizeof($this->children) > 0) {                $out .= "\n";                foreach ($this->children as $child) {                    $out .= $child->get();                }            } else {                $ident = '';            }            if ($do_ident) {                $out .= $ident . '</' . $this->name . ">\n";            } else {                $out .= '</' . $this->name . '>';            }            $do_ident = true;        } else {            $out = $this->content;            $do_ident = false;        }        $deep--;        return $out;    }    /**    * Gets an attribute by its name.    *    * @param  string  name    * @return string  attribute    */    function getAttribute($name) {        return $this->attributes[strtolower($name)];    }    /**    * @deprecated    */    function get_attribute($name) {        return $this->getAttribute($name);    }    /**    * Gets an element by its 'path'.    *    * @param  string  path    * @return object  element    */    function &getElement($path) {        if (sizeof($path) == 0) {            return $this;        }        $next = array_shift($path);        return $this->children[$next]->get_element($path);    }    /**    * @deprecated    */    function &get_element($path) {        return $this->getElement($path);    }    /**    * Sets an attribute.    *    * @param  string  name    * @param  string  value    */    function setAttribute($name, $value = '') {        $this->attributes[strtolower($name)] = $value;    }    /**    * @deprecated    */    function set_attribute($name, $value = '') {        return $this->setAttribute($name, $value);    }    /**    * Unsets an attribute.    *    * @param  string  name    */    function unsetAttribute($name) {        unset($this->attributes[strtolower($name)]);    }    /**    * @deprecated    */    function unset_attribute($name) {        return $this->unsetAttribute($name);    }    /**    *    *    */    function setContent(&$content)    {        $this->content = $this->_xml_entities($content);    }    function set_content(&$content)    {        return $this->setContent($content);    }    /**    * Escape XML entities.    *    * @param   string  xml    * @return  string  xml    * @access  private    */    function _xml_entities($xml) {        $xml = str_replace(array('

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?