源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

3

  • 时间:2022-06-23 15:16 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:3
{                     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 "< " with "< "     * (we assume that when there's no space after < it's a tag, which we need in the xml)     *  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("< ","< ",$text)));              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)));             $text = trim(ereg_replace("&","&",ereg_replace("< ","< ",$text))); //            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 <root>     * 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] <= 4 and $version[1] <= 0 and $version[2] < 7) ){             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("/<\?xml.*\?>/","",$string);             $MainXmlString = preg_replace("/<".$this->xmlroot->{$this->tagname}."\/>/","<".$this->xmlroot->{$this->tagname}."></".$this->xmlroot->{$this->tagname}.">",$MainXmlString);             $MainXmlString = preg_replace("/<\/".$this->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;         }     } } ?>
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部