# 147 # 193 # ... # $name = get_parameter("name"); $gender = get_parameter("gender"); # search the input file for the line about the given name/gender $matching_line = ""; $lines = file("rank.txt", FILE_IGNORE_NEW_LINES); foreach ($lines as $line) { if (preg_match("/^$name $gender /", $line)) { $matching_line = $line; break; } } if ($matching_line) { $xmldom = generate_xml($line, $name, $gender); header("Content-type: text/xml"); print $xmldom->saveXML(); } else { # this person/gender was not found; issue HTTP error 410 header("HTTP/1.1 410 Gone"); die("HTTP/1.1 410 Gone - There is no data for this name/gender."); } # Creates and returns an XML DOM tree for the given line of data. # for the data, "Aaron m 147 193 187 199 250 237 230 178 52 34 34 41 55", # would produce the following XML: # # 147 # 193 # ... # function generate_xml($line, $name, $gender) { $xmldom = new DOMDocument(); $baby_tag = $xmldom->createElement("baby"); # $baby_tag->setAttribute("name", $name); $baby_tag->setAttribute("gender", $gender); # Aaron m 147 193 187 199 250 237 230 178 52 34 34 41 55 $year = 1890; $tokens = explode(" ", $line); for ($i = 2; $i < count($tokens); $i++) { $rank_tag = $xmldom->createElement("rank"); # 147 $rank_tag->setAttribute("year", $year); $rank_tag->appendChild($xmldom->createTextNode($tokens[$i])); $baby_tag->appendChild($rank_tag); $year += 10; } $xmldom->appendChild($baby_tag); return $xmldom; } # Returns the value of the given query parameter. # If the parameter has not been passed, issues an HTTP 400 error. function get_parameter($name) { if (isset($_GET[$name])) { return $_GET[$name]; } else { header("HTTP/1.1 400 Invalid Request"); die("HTTP/1.1 400 Invalid Request - you forgot to pass a '$name' parameter."); } } ?>