. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ class Node { var $name = ""; var $attribute = NULL; var $value = NULL; var $children = NULL; } $header = ""; $tree = NULL; function read_config_file(){ global $home; $directory = PATH_DYNAFORM; $car = substr ($directory, strlen ($directory)-1, 1); if ($car=='/' ) $directory = substr( $directory, 0, strlen($directory)- 1 ); $home = $directory; global $showlang; $showlang = "es,en"; } function parseNodo1 ( $token ) { //parse de en un nuevo nodo. $nodo = new Node; $nodo->children = NULL; $tok = ""; $n = 0; for ($i=0; $i while ($bufIndex <= $size && $car !='>') { $token .= $car; $car = $buffer [$bufIndex++]; } if ($token[0] == "?") { $header = $token; return; } $nodo = parseNodo1 ($token); //SEGUNDO BUCLE buscar VALUE $car = $buffer [$bufIndex++]; $token = ""; while ($bufIndex <= $size && $car !='<') { $token .= $car; $car = $buffer [$bufIndex++]; } $nodo->value = trim($token); //TERCER BUCLE buscar $res = 0; while ($res == 0) { if ($car != "<") while ( ($car = trim( $buffer [$bufIndex++] )) == ""); if ($car=="<") { $res = 0; $car = $buffer [$bufIndex++]; //ADDCHILD nodo recien creado if ($car != "/") { $bufIndex --; $n = count($nodo->children); $nodo->children[$n] = getTag (); } else $res = 1; } else die ("se esperaba '<' y se encontro $car"); } //se supone que se ha leido "') { $token .= $car; $car = $buffer [$bufIndex++]; } if ( strcmp ($nodo->name, trim($token)) != 0) die ("no corresponde fin de tag </$token> con <" . $nodo->name. ">"); return $nodo; } function parseFile ($filename) { global $tree; global $buffer; global $bufIndex; global $size; if (strlen($filename) <= 0) die ("invalid filename"); if ( ! file_exists ( $filename) ) die ("This file $filename does not exist"); if ( ! is_file ( $filename) ) die ("$filename is not a file"); $size = filesize ($filename); $fp = fopen ($filename, "rb"); $i = 0; $aux = fread($fp, $size); $buffer = ""; for ($i = 0; $i < $size; $i++) { if (!($aux[$i] == "\n" || $aux[$i] == "\r" || $aux[$i] == "\t")) $buffer .= $aux[$i]; } fclose ($fp); $bufIndex = 0; $size = strlen ($buffer); while ( $bufIndex <= $size ) { $car = $buffer [$bufIndex++]; if ($car == '<' ) $tree = getTag(); } } function saveXml(){ global $tree; global $header; global $filename; global $HTTP_POST_VARS; global $curDir; global $onlyName; //crear el archivo Xml // print "$filename
"; $fp = fopen ($filename, "w+"); fputs ($fp,"<$header>\n"); $aux = explode ( '/', $filename); $onlyName = $aux[count($aux)-1]; $curDir = $HTTP_POST_VARS['curDir']; fputs ($fp,"$tree->value\n"); for ($i = 0; $i < count($tree->children); $i++) { $nodo = $tree->children[$i]; fputs ($fp,"<$nodo->name "); if ( is_array ($nodo->attribute) ) foreach ( $nodo->attribute as $attr=>$attrValue ) fputs ($fp,"$attr=\"$attrValue\" "); fputs ($fp,">\n"); //si es un dropdown-SQL la sentencia select va como valor del nodo if (strlen ($nodo->value) > 0) { fputs ($fp,"$nodo->value\n"); } for ($j = 0; $j < count($nodo->children); $j++) { $lang = $nodo->children[$j]; fputs ($fp, " <$lang->name>$lang->value"); //si tiene etiquetas del tipo option if (is_array($lang->children)) { fputs ($fp, "\n"); for ($k = 0; $k < count($lang->children); $k++) { $option = $lang->children[$k]; fputs ($fp, "\n"); } } //if tiene etiquetas del tipo opcion. fputs ($fp, "name>\n"); } //for j fputs ($fp,"name>\n"); } //for i fputs ($fp,"\n"); fclose ($fp); } ?>