Tutorials to .com

3

Print View , by: iSee ,Total views: 7 ,Word Count: 1637 ,Date: Thu, 16 Apr 2009 Time: 12:54 AM

(
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) [AutoPage]
(
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. [AutoPage]
*
* 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)
([AutoPage]
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) [AutoPage]
(
$ 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;
)
)

)
?>


Php XML Application Articles


Can't Find What You're Looking For?


Rating: Not yet rated

Comments

No comments posted.