<center> <h2>CD Album Report</h2> </center> <?php $type_stack = array(); function start_element($parser, $element_name, $element_attrs) { global $type_stack; global $value; global $num_cds; global $name; switch ($element_name) { case 'CD': printf("<hr>"); break; } array_push($type_stack, $element_name); } function end_element($parser, $element_name) { global $type_stack; $type = array_pop($type_stack); switch($type) { case 'CD': printf("</ul>\n"); break; } } function char_handler($parser, $data) { global $type_stack; switch(end($type_stack)) { case 'TITLE': printf("<h3>%s</h3>\n", $data); printf("<ul>\n"); break; case 'ARTIST': printf("<li>artist: %s</li>\n", $data); break; case 'PRICE': $price = (double)$data; if ($price <= 9.00) { printf("<li>price: <span style=\"color: blue\">%s</span></li>\n", $data); } else { printf("<li>price: <span style=\"color: green\">%s</span></li>\n", $data); } break; case 'YEAR': printf("<li>year: %s</li>\n", $data); break; } } $parser = xml_parser_create(); xml_set_element_handler($parser, 'start_element', 'end_element'); xml_set_character_data_handler($parser, 'char_handler'); $fp = fopen('cdcatalog.xml', 'r') or die ("cannot open cdcatalog.xml"); while ($data = fread($fp, 4096)) { xml_parse($parser, $data, feof($fp)) or die(sprintf('XML ERROR: %s at line %d', xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } ?>