PHP/XML/XML Transformation
Generating Tables from XML
<source lang="html4strict">
<html> <head> <title>Parsing With Expat and PHP</title> </head> <body> <?php
$cdata = ""; $cur_elem = ""; $first_name = ""; $middle_name = ""; $last_name = ""; $hdr_row = "<tr><td colspan="2">%s</td></tr>" . "\n"; $data_row = "<tr><td >%s</td><td>%s</td></tr>" . "\n"; $empty_row = "<tr><td colspan="2"> </td></tr>" . "\n"; function start_elem ($parser, $name, $attrs) { global $cur_elem; $cur_elem = $name; if ($name == "contact")print ("
case ("personal"): case ("address"): case ("tel"): print ($empty_row); break; case ("name"): print (sprintf ($hdr_row, "$last_name, $first_name $middle_name")); $first_name = $last_name = $middle_name = ""; break; case ("title"): print (sprintf ($data_row, "Title", $cdata)); break; case ("employer"): print (sprintf ($data_row, "Company", $cdata)); break; case ("dob"): print (sprintf ($data_row, "Birthdate", $cdata)); break; } $cdata = ""; } function cdata ($parser, $data) { global $cdata, $cur_elem, $last_name, $first_name, $middle_name; $data = trim ($data); switch ($cur_elem) { case ("first"): $first_name .= $data; break; case ("middle"): $middle_name .= $data; break; case ("last"): $last_name .= $data; break; default: $cdata .= $data; } } $file = "contact.xml"; $parser = xml_parser_create (); xml_parser_set_option ($parser, XML_OPTION_CASE_FOLDING, false); xml_set_element_handler ($parser, "start_elem", "end_elem"); xml_set_character_data_handler ($parser, "cdata"); $fp = fopen ($file, "r"); if (!$fp){ die ("Couldn"t open $file for reading"); } while ($xml_input = fread ($fp, 2048)) { $ok = xml_parse ($parser, $xml_input, feof ($fp)); if (!$ok){ die (sprintf ("Error in $file: "%s" at line %d", xml_error_string (xml_get_error_code ($parser)), xml_get_current_line_number ($parser))); } } xml_parser_free ($parser);
?> </body> </html>
</source>
Transforming XML into Basic HTML
<source lang="html4strict">
<html> <head><title>Parsing With Expat and PHP</title></head> <body> <?php
$cdata = ""; function start_elem ($parser, $name, $attrs) { switch ($name) { case ("personal"):print ("
"); break;
case ("name"):
print (""); break;
case ("address"):
print ("<p><b>Address</b>\n"); break;
case ("tel"):
print ("<p><b>Telephone</b>\n"); break;
case ("contact"):
case ("name"):
case ("first"):
case ("middle"):
case ("last"):
case ("title"):
case ("employer"):
case ("dob"):
break;
default:
print ("<b>Warning: Unknown tag "$name""); break;
}
}
function end_elem ($parser, $name) {
global $cdata;
$cdata = trim ($cdata);
switch ($name)
{
case ("personal"):
print ("</p>\n\n"); break;
case ("name"):
print ("\n"); break;
case ("first"):
print ($cdata . " "); $cdata = ""; break;
case ("middle"):
print ($cdata . " "); $cdata = ""; break;
case ("last"):
print ("$cdata"); $cdata = ""; break;
case ("title"):
print ("
Title: $cdata\n"); $cdata = ""; break;
case ("employer"):
print ("
Company: $cdata\n"); $cdata = ""; break;
case ("dob"):
print ("
Birthdate: $cdata\n"); $cdata = ""; break;
default:
print ("Warning: Unknown element "$name""); break;
}
}
function cdata ($parser, $data) {
global $cdata;
$cdata .= $data;
}
$file = "contact.xml";
$parser = xml_parser_create ();
xml_parser_set_option ($parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler ($parser, "start_elem", "end_elem");
xml_set_character_data_handler ($parser, "cdata");
$fp = fopen ($file, "r");
if (!$fp){
die ("Couldn"t open $file for reading");
}
while ($xml_input = fread ($fp, 2048)) {
$ok = xml_parse ($parser, $xml_input, feof ($fp));
if (!$ok)
die (sprintf ("Error in $file: "%s" at line %d",
xml_error_string (xml_get_error_code ($parser)),
xml_get_current_line_number ($parser)));
}
xml_parser_free ($parser);
?>
</body>
</html>
/*
<contact id="43956">
<personal>
<name>
<first>J</first>
<middle>J</middle>
<last>J</last>
</name>
<title>Manager</title>
<employer>National Company</employer>
<dob>1951-02-02</dob>
</personal>
</contact>
- /