diff options
Diffstat (limited to 'includes_old/funktion_xml.php')
-rw-r--r-- | includes_old/funktion_xml.php | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/includes_old/funktion_xml.php b/includes_old/funktion_xml.php new file mode 100644 index 00000000..4ab3bfd5 --- /dev/null +++ b/includes_old/funktion_xml.php @@ -0,0 +1,152 @@ +<?php +class element { + var $name = ''; + var $attributes = array (); + var $data = ''; + var $depth = 0; + var $sub = array (); +} + +$XMLDEBUG = 0; +$depth = 0; +$XMLmain = new element; +$XMLpos = array ( + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +); +//$XMLpos = array( 0, 0, 0, 0, 0, 0); + +function convertValues($Data) { + global $XMLDEBUG; + + if ($XMLDEBUG) { + $Data = htmlspecialchars($Data); + $Data = mysql_escape_string($Data); + $Data = htmlentities($Data); + } + + $Data = utf8_decode($Data); + return $Data; +} + +function dataXMLmain($Data, & $Objekt, $Tiefe) { + global $XMLmain, $XMLpos, $depth, $XMLDEBUG; + + if ($XMLDEBUG) + echo "?$Tiefe$depth"; + + if (($depth -1) == $Tiefe) { + $Objekt->sub[$XMLpos[$Tiefe]]->data .= htmlentities(convertValues($Data), ENT_QUOTES); + + if ($XMLDEBUG) + echo "???" . $Objekt->sub[$XMLpos[$Tiefe]]->name . "|$Data|$Tiefe???<br />"; + } else + dataXMLmain($Data, $Objekt->sub[$XMLpos[$Tiefe]], $Tiefe +1); +} + +function startXMLmain($Data, & $Objekt, $Tiefe) { + global $XMLpos, $depth, $XMLDEBUG; + + if ($XMLDEBUG) + if ($Tiefe == 1) { + print_r(array_values($XMLpos)); + echo "--" . $Data->name; + echo " #$Tiefe/$depth#"; + } + + if ($depth == $Tiefe) { + $Objekt->sub[$XMLpos[$Tiefe]] = $Data; + if ($XMLDEBUG) + echo "|" . $XMLpos[$Tiefe] . "|" . $Objekt->sub[$XMLpos[$Tiefe]]->name . " " . $Data->name . " save|" . "#-#<br />"; + } else + startXMLmain($Data, $Objekt->sub[$XMLpos[$Tiefe]], $Tiefe +1); +} + +function start_element_handler($parser, $name, $attribs) { + global $depth, $XMLmain, $XMLpos; + + $Data = new element; + $Data->name = $name; + while (list ($key, $value) = each($attribs)) + $Data->attributes[$key] = convertValues($value); + $Data->depth = $depth; + $XMLpos[$depth]++; + + if ($depth == 0) + $XMLmain = $Data; + else + startXMLmain($Data, $XMLmain, 1); + + $depth++; +} + +function end_element_handler($parser, $name) { + global $depth, $XMLpos; + $XMLpos[$depth] = 0; + $depth--; +} + +function character_data_handler($parser, $data) { + global $XMLmain; + if (strlen(trim($data))) + dataXMLmain($data, $XMLmain, 1); +} + +/*#######################################################################################*/ +function readXMLfile($file) { + global $XMLDEBUG; + + //$xml_parser = xml_parser_create_ns(); + $xml_parser = xml_parser_create("UTF-8"); + xml_set_element_handler($xml_parser, "start_element_handler", "end_element_handler"); + xml_set_character_data_handler($xml_parser, "character_data_handler"); + + if (file_exists($file)) { + if (!($fp = fopen($file, "r"))) { + echo (" <h1>could not open XML file \"$file\"</h1>"); + return -1; + } + } else { + echo (" <h1>XML file \"$file\" not exist</h1>"); + return -1; + } + + if ($XMLDEBUG) + echo "<pre>"; + while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); + } + } + if ($XMLDEBUG) + echo "</pre>"; + xml_parser_free($xml_parser); + return 0; +} + +/*#######################################################################################*/ +function getXMLsubPease($Sourse, $Name) { + foreach ($Sourse->sub as $key => $value) { + if ($value->name == $Name) { + return $value; + } + } + // die; +} + +/*#######################################################################################*/ +function getXMLsubData($Sourse, $Name) { + $XML = getXMLsubPease($Sourse, $Name); + return $XML->data; +} +?> |