summaryrefslogtreecommitdiff
path: root/inc/funktion_xml.php
diff options
context:
space:
mode:
Diffstat (limited to 'inc/funktion_xml.php')
-rwxr-xr-xinc/funktion_xml.php138
1 files changed, 138 insertions, 0 deletions
diff --git a/inc/funktion_xml.php b/inc/funktion_xml.php
new file mode 100755
index 00000000..f740cfac
--- /dev/null
+++ b/inc/funktion_xml.php
@@ -0,0 +1,138 @@
+<?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)
+{
+ 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 .= convertValues($Data);
+ 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 )
+{
+ //$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 (!($fp = fopen($file, "r")))
+ {
+ die("could not open XML input");
+ }
+
+ 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);
+}
+
+/*#######################################################################################*/
+function getXMLsubPease( $Sourse, $Name )
+{
+ while(list($key, $value) = each($Sourse->sub))
+ if( $value->name == $Name)
+ return $value;
+
+ echo "<h1>Fehler: getXMLsubPease( $Sourse, $Name ) not found</h1>";
+ die;
+}
+
+?>