PHP/XML/XML Transformation

Материал из Web эксперт
Перейти к: навигация, поиск

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 ("\n"); } function end_elem ($parser, $name) { global $cdata, $cur_elem, $hdr_row, $data_row, $empty_row, $first_name, $last_name, $middle_name; $cdata = trim ($cdata); switch ($name) { case ("contact"): print ("
\n"); break;
              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>

  • /
</source>