{
if (is_array($value) && ! $delete)
{
foreach ($value as $suboption => $subvalue)
{
$this->{$option}["$suboption"] = $サブ値;
}
}
else
{
$this->$option = $value;
}
}
}
}
// これらはユーザー クラスでオーバーライドされることを目的とした関数です
/**
*
* @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 には $root->タグ名として名前を付けるここで確認してください...
if (!isset($this->xmlroot->{$this->tagname}))
{
$this->tagname = "name";
}
return $this->xmlroot;
}
}
/**
* 書き込む
*
* @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-& gt; new_child($this->tagNameRow, Null);
}
/**
* 書き込む
*
* @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]));
}
/**
* 執筆予定
*
* @param mixed $key
* @param mixed $value
* @param mixed &$metadata
* @access private
*/
function addTableInfo($key, $value, &$metadata) {
}
// ユーザークラスでオーバーライドされることを目的とした関数を終了します
// ここに来ますいくつかのヘルパー関数...
/**
* 入力データから utf8 を作成し、& で & をエスケープし、"< " で "< " をエスケープします
* (< の後にスペースがない場合はタグであると想定し、xml で必要とします)
*これが標準的な方法かどうかはわかりませんが、私にとってはうまくいきます。
*
* @param 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 = "エラー: $php_errormsg";
}
else
{
$errormsg = "未定義の iconv エラー。詳細を取得するには、php.ini で track_errors をオンにしてください";
}
return PEAR::raiseError($errormsg,Null,PEAR_ERROR_DIE);
}
else {
return $text;
}
else
{
//$text = utf8_encode("&"," &",ereg_replace("<; "、"< ",$text)));
$text =rim(ereg_replace("&","&",ereg_replace("< ","< ",$text)));
// echo $text;
}
return $text;
}
//kc@hireability.com http://www.php.net/manual/en/function.array-merge-recursive.phpより抜粋
/**
* 2 つの配列を再帰的にマージし、既存のキーと値のペアを破壊する組み込み関数はないようです
* 。 Array_Merge() は再帰的ではなく、array_merge_recursive
* 満足のいく結果が得られないようでした...重複したキー/値が追加されてしまいます。
*
* それでは、array_merge と array_merge_recursive の組み合わせです
**/
/**
*
* @param array マージされる最初の配列
* @param array マージされる 2 番目の配列
* @return 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;
}
/**
* xml 文字列を $this->xmldoc に追加します。
* 「通常の」結果セットと同じレベルに挿入されます。つまり、
* xpath 式が指定されている場合は、 xml ファイルの一部のみを選択する場合
*
* クリーンなコードは php 4.0.7 でのみ機能します
* php4.0.6 の場合:
* 以下の方法よりもクリーンな方法は見つかりませんでした。おそらく厄介です (xmlObject->string->xmlObject)
* しかし、それは機能します。 DomNode 全体を別の DomNode に追加する方法を知っている人がいたら、教えてください...
*
* @param string xml string
* @param mixed xpath xpath 式を含む文字列、または "xpath"=> を含む配列のいずれか。 xpath 式と「root」=tag/subtag/etc、結果の前に挿入されるタグです
* @access private
*/
関数doXmlString2Xml ($string,$xpath = Null)
{
//最近の domxml があるかどうかを確認します。それ以外の場合は、回避策を使用してください...
$version =explode(".",phpversion());
if (! ($version[0]
if (is_array($xpath))
{
if (isset($xpath["root"]))
{
$root = $xpath["root"];
$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 が xpath からノードを追加すると、奇妙な動作をします.... このコメントは役に立ちます
$newchild = $subroot->add_child($this->xmldoc->create_comment("このコメントの目的は、sql2php.php 行 ".__LINE__)) の回避策です。 ;
// xpath が指定されていない場合は、ファイル全体を取得します
if ( (is_null($xpath)))
{
$newchild->append_child($tmp xml->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->dum pmem();
$string = preg_replace("/ ;/","",$string);
$MainXmlString = preg_replace("/<".$this->xmlroot->{$this->タグ名}."/>/","<".$this->xmlroot-> {$this->タグ名}.">".$this->xmlroot->{$this->タグ名}.">",$MainXmlString);
$MainXmlString = preg_replace( "/".$this->xmlroot->{$this->タグ名}.">/",$string."/".$this->xmlroot->{ $this->tagname}.">",$MainXmlString);
$this->xmldoc = xmldoc($MainXmlString);
$this->xmlroot = $this->xmldoc->root ();
}
}
/**
* db2xml 変換のエンコーディングを設定します
* @param string $encoding_from 変換元のエンコーディング
* @param string $encoding_to 変換先のエンコーディング
* @access public
*/
function setEncoding ($encoding_from = "ISO-8859-1", $encoding_to ="UTF-8")
{
$this-> coding_from = $encoding_from;
$this->encoding_to = $encoding_to;
}
/**
* @param array $parentTables 親と子の関係
* @access public
*/
function SetParentTables($parentTables)
{
foreach ($parentTables as $table) =>$親)
{
$table_info["parent_table"][$table]=$parent;
}
$this->SetOptions(array("user_tableInfo"=>$table_info));
}
/**
* xpath 式の最初に一致した内容を返します
*
* @param string $expr xpath 式
* @return 評価された xpath 式の混合コンテンツ
* @access public
*/
function getXpathValue ($expr)
{
$xpth = $this->xmldoc->xpath_new_context();
$xnode = xpath_eval($xpth,$expr);
場合 ( isset ($xnode->nodeset[0]))
{
$firstnode = $xnode->nodeset[0];
$children = $firstnode->children();
$value = $children[ 0]->content;
return $value;
}
else
{
return Null;
}
}
/**
* xpath 式の最初に一致した子タグから値を配列として取得します
*
* @param string xpath 式
* @return サブタグのキー->値を含む配列
* @access public
*/
関数 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->タグ名}] = $children[0]->content;
}
return $value;
}
else
{
return Null;
}
}
}
?>
🎜