<?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; } } echo "<h1>Fehler: getXMLsubPease( $Sourse, $Name ) not found</h1>"; // die; } /*#######################################################################################*/ function getXMLsubData($Sourse, $Name) { $XML = getXMLsubPease($Sourse, $Name); return $XML->data; } ?>