<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      3

      [摘要]if (is_array(value) && ! delete) foreach (value as suboption => subvalue) ...

      {
                          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;
              }
          }

      }
      ?>



      標簽:3 
      日韩精品一区二区三区高清