无为清净楼资源网 Design By www.qnjia.com
{
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|
无为清净楼资源网 Design By www.qnjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无为清净楼资源网 Design By www.qnjia.com
暂无评论...
更新日志
2024年11月15日
2024年11月15日
- 黄乙玲1988-无稳定的爱心肝乱糟糟[日本东芝1M版][WAV+CUE]
- 群星《我们的歌第六季 第3期》[320K/MP3][70.68MB]
- 群星《我们的歌第六季 第3期》[FLAC/分轨][369.48MB]
- 群星《燃!沙排少女 影视原声带》[320K/MP3][175.61MB]
- 乱斗海盗瞎6胜卡组推荐一览 深暗领域乱斗海盗瞎卡组分享
- 炉石传说乱斗6胜卡组分享一览 深暗领域乱斗6胜卡组代码推荐
- 炉石传说乱斗本周卡组合集 乱斗模式卡组最新推荐
- 佟妍.2015-七窍玲珑心【万马旦】【WAV+CUE】
- 叶振棠陈晓慧.1986-龙的心·俘虏你(2006复黑限量版)【永恒】【WAV+CUE】
- 陈慧琳.1998-爱我不爱(国)【福茂】【WAV+CUE】
- 咪咕快游豪礼放送,百元京东卡、海量欢乐豆就在咪咕咪粉节!
- 双11百吋大屏焕新“热”,海信AI画质电视成最大赢家
- 海信电视E8N Ultra:真正的百吋,不止是大!
- 曾庆瑜1990-曾庆瑜历年精选[派森][WAV+CUE]
- 叶玉卿1999-深情之选[飞图][WAV+CUE]