I comed up with this <?php $file = "xmltest2.xml"; $stack = array(); $foo3 = "wddw"; // start_element_handler ( resource parser, string name, array attribs ) function startElement($parser, $name, $attribs) { global $stack; $tag=array("name"=>$name,"attrs"=>$attrs); array_push($stack,$tag); } // end_element_handler ( resource parser, string name ) function endElement($parser, $name) { global $stack; $stack[count($stack)-2]['children'][] = $stack[count($stack)-1]; array_pop($stack); } // handler ( resource parser, string data ) function characterData($parser, $data) { global $stack,$i; eval("\$data = \"$data\";"); if(trim($data)) { $stack[count($stack)-1]['data']=$data; } } // handler ( resource parser, string target, string data ) function PIHandler($parser, $target, $data) { if ((strtolower($target)) == "php") { global $parser_file; eval($data); } } function defaultHandler($parser, $data) { } function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, $publicId) { if ($systemId) { if (!list($parser, $fp) = new_xml_parser($systemId)) { printf("Could not open entity %s at %s\n", $openEntityNames, $systemId); return false; } while ($data = fread($fp, 4096)) { if (!xml_parse($parser, $data, feof($fp))) { printf("XML error: %s at line %d while parsing entity %s \n", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser), $openEntityNames); xml_parser_free($parser); return false; } } xml_parser_free($parser); return true; } return false; } function new_xml_parser($file) { global $parser_file; $xml_parser = xml_parser_create(); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0); xml_set_processing_instruction_handler($xml_parser, "PIHandler"); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); xml_set_default_handler($xml_parser, "defaultHandler"); xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler"); if (!($fp = @fopen($file, "r"))) { return false; } if (!is_array($parser_file)) { settype($parser_file, "array"); } $parser_file[$xml_parser] = $file; return array($xml_parser, $fp); } if (!(list($xml_parser, $fp) = new_xml_parser($file))) { die("could not open XML input"); } //ERROR while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d\n", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } //END xml_parser_free($xml_parser); print("<pre>\n"); print_r($stack); print("</pre>\n"); ?> it evaluates php code. But when I use eval("\$data = \"$data\";"); the strings in the $data e.g. ('sth $foo other $foo1')do not appear. I think the problem is that it thinks they are undefined. Here is the xml file <?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY testEnt "test entity"> ]> <document> <foo> <?php $foo3='555'; echo "Some text"; ?> </foo> <foo> hi </foo> <foo>foo $foo3 foo </foo> </document> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php