# 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.");
}
}
?>