您好,欢迎访问一九零五行业门户网

3_PHP教程

{
                    if (is_array($value) && ! $delete)
                    {
                        foreach ($value as $suboption => $subvalue)
                        {
                            $this->{$option}[$suboption] = $subvalue;
                        }
                    }
                    else
                    {
                          $this->$option = $value;
                    }
                }
            }
        }
    }
// these are the functions, which are intended to be overriden in user classes
/**
    *
    * @param    mixed
    * @return   object  domnode
    * @access   private
    */
    function insertnewresult(&$metadata)
    {
        if ($this->xmlroot)
            return $this->xmlroot->new_child($this->tagnameresult, null);
        else
        {
            $this->xmlroot = $this->xmldoc->add_root($this->tagnameresult);
            //php 4.0.6 had $root->name as tagname, check for that here...
            if (!isset($this->xmlroot->{$this->tagname}))
            {
                $this->tagname = name;
            }
            return $this->xmlroot;
}
    }
/**
    *   to be written
    *
    * @param    object domnode $parent_row
    * @param    mixed $res
    * @param    mixed $key
    * @param    mixed &metadata
    * @return   object domnode
    * @access private
    */
    function insertnewrow($parent_row, $res, $key, &$metadata)
    {
        return  $parent_row->new_child($this->tagnamerow, null);
    }
/**
    *   to be written
    *
    * @param    object domnode $parent
    * @param    mixed $res
    * @param    mixed $key
    * @param    mixed &$metadata
    * @param    mixed &$subrow
    * @return   object domnode
    * @access private
    */
    function insertnewelement($parent, $res, $key, &$metadata, &$subrow)
    {
        return  $parent->new_child($metadata[$key][name], $this->xml_encode(trim$res[$key]));
    }
/**
    *   to be written
    *
    * @param    mixed $key
    * @param    mixed $value
    * @param    mixed &$metadata
    * @access private
    */
    function addtableinfo($key, $value, &$metadata) {
}
// end functions, which are intended to be overriden in user classes
// here come some helper functions...
/**
    * make utf8 out of the input data and escape & with & and     * (we assume that when there's no space after     *  i'm not sure, if this is the standard way, but it works for me.
    *
    * @param    string text to be utfed.
    * @access private
    */
    function xml_encode ($text)
    {
        if (function_exists(iconv) && isset($this->encoding_from) && isset($this->encoding_to))
        {
             ini_set(track_errors,1);
             $text = iconv($this->encoding_from,$this->encoding_to,ereg_replace(&,&,ereg_replace(
             if (! isset($text) )
             {
                if (isset($php_errormsg))
                {
                    $errormsg = error: $php_errormsg;
                }
                else
                {
                    $errormsg = undefined iconv error, turn on track_errors in php.ini to get more details;
                }
                return pear::raiseerror($errormsg,null,pear_error_die);
             }
             else {
                return $text;
             }
        }
        else
        {
            //$text = utf8_encode(ereg_replace(&,&,ereg_replace(            $text = trim(ereg_replace(&,&,ereg_replace(//            echo $text;
        }
        return $text;
    }
//taken from kc@hireability.com at http://www.php.net/manual/en/function.array-merge-recursive.php
    /**
    * there seemed to be no built in function that would merge two arrays recursively and clobber
    *   any existing key/value pairs. array_merge() is not recursive, and array_merge_recursive
    *   seemed to give unsatisfactory results... it would append duplicate key/values.
    *
    *   so here's a cross between array_merge and array_merge_recursive
    **/
    /**
    *
    * @param    array first array to be merged
    * @param    array second array to be merged
    * @return   array merged array
    * @access private
    */
    function array_merge_clobber($a1,$a2)
    {
        if(!is_array($a1)
!is_array($a2)) return false;
        $newarray = $a1;
        while (list($key, $val) = each($a2))
        {
            if (is_array($val) && is_array($newarray[$key]))
            {
                $newarray[$key] = $this->array_merge_clobber($newarray[$key], $val);
            }
            else
            {
                $newarray[$key] = $val;
            }
        }
        return $newarray;
    }
/**
    * adds a xml string to $this->xmldoc.
    * it's inserted on the same level as a normal resultset, means just as a children of
    * if a xpath expression is supplied, it takes that for selecting only part of the xml-file
    *
    * the clean code works only with php 4.0.7
    * for php4.0.6 :
    * i found no cleaner method than the below one. it's maybe nasty (xmlobject->string->xmlobject),
    *  but it works. if someone knows how to add whole domnodes to another one, let me know...
    *
    * @param    string xml string
    * @param    mixed xpath  either a string with the xpath expression or an array with xpath=>xpath expression  and root=tag/subtag/etc, which are the tags to be inserted before the result
    * @access private
    */
function doxmlstring2xml ($string,$xpath = null)
    {
//check if we have a recent domxml. otherwise use the workaround...
        $version = explode(.,phpversion());
if (! ($version[0]
            if (is_array($xpath))
            {
                if (isset($xpath[root]))
                {
                    $root = $xpath[root];
                }
                $xpath = $xpath[xpath];
            }
$tmpxml = xmldoc($string);
            $subroot = $this->xmlroot;
if (isset($root))
            {
                $roots = explode(/,$root);
                foreach ($roots as $rootelement)
                {
                    if ( strlen($rootelement) > 0 )
                    {
                        $subroot = $subroot->new_child($rootelement,);
                    }
                }
            }
//$this->xmlroot->addchild does some strange things when added nodes from xpath.... so this comment helps out
            $newchild = $subroot->add_child($this->xmldoc->create_comment(the purpose of this comment is a workaround in sql2php.php line .__line__));
// if no xpath is given, just take the whole file
            if ( (is_null($xpath)))
            {
                $newchild->append_child($tmpxml->root());
            }
            else
            {
                $xctx = $tmpxml->xpath_new_context();
                $xnode = xpath_eval($xctx,$xpath);
                foreach ($xnode->nodeset as $node)
                {
                    $newchild->append_child($node);
                }
            }
}
        else {
            $mainxmlstring = $this->xmldoc->dumpmem();
            $string = preg_replace(//,,$string);
$mainxmlstring = preg_replace(/xmlroot->{$this->tagname}.\/>/,xmlroot->{$this->tagname}.>.$this->xmlroot->{$this->tagname}.>,$mainxmlstring);
            $mainxmlstring = preg_replace(/xmlroot->{$this->tagname}.>/,$string..$this->xmlroot->{$this->tagname}.>,$mainxmlstring);
$this->xmldoc = xmldoc($mainxmlstring);
            $this->xmlroot = $this->xmldoc->root();
}
    }
/**
    * sets the encoding for the db2xml transformation
    * @param    string $encoding_from encoding to transform from
    * @param    string $encoding_to encoding to transform to
    * @access public
    */
    function setencoding ($encoding_from = iso-8859-1, $encoding_to =utf-8)
    {
        $this->encoding_from = $encoding_from;
        $this->encoding_to = $encoding_to;
    }
    /**
    * @param array $parenttables parent to child relation
    * @access public
    */
function setparenttables($parenttables)
    {
        foreach ($parenttables as $table => $parent)
        {
            $table_info[parent_table][$table]=$parent;
        }
        $this->setoptions(array(user_tableinfo=>$table_info));
    }
/**
    * returns the content of the first match of the xpath expression
    *
    * @param    string $expr xpath expression
    * @return   mixed content of the evaluated xpath expression
    * @access   public
    */
function getxpathvalue ($expr)
    {
$xpth = $this->xmldoc->xpath_new_context();
        $xnode = xpath_eval($xpth,$expr);
if (isset ($xnode->nodeset[0]))
        {
            $firstnode = $xnode->nodeset[0];
$children = $firstnode->children();
            $value = $children[0]->content;
                return $value;
        }
else
        {
            return null;
        }
    }
/**
    * get the values as an array from the childtags from the first match of the xpath expression
    *
    * @param    string xpath expression
    * @return   array with key->value of subtags
    * @access   public
    */
function getxpathchildvalues ($expr)
    {
        $xpth = $this->xmldoc->xpath_new_context();
        $xnode = xpath_eval($xpth,$expr);
if (isset ($xnode->nodeset[0]))
        {
            foreach ($xnode->nodeset[0]->children() as $child)
            {
                $children = $child->children();
                $value[$child->{$this->tagname}] = $children[0]->content;
            }
            return $value;
        }
        else
        {
            return null;
        }
    }
}
?>
http://www.bkjia.com/phpjc/314311.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/314311.htmltecharticle{ if (is_array($value) ! $delete) { foreach ($value as $suboption = $subvalue) { $this-{$option}[$suboption] = $subvalue; } } else { $this-$option = $value; } } } } } // these ar...
其它类似信息

推荐信息