XML tag translation to HTML

In this example we perform a "raw" translation of XML element tags to HTML formatting tags.

The original document

<?xml version="1.0"?>
!<DOCTYPE formatted SYSTEM "format.dtd">
Here is some <BOLD>boldfaced text</BOLD>, sone
<EMPHASIZED>emphasized text<</EMPHASIZED>, and some
<UNDERLINED>underlined text</UNDERLINED>.

The DTD file

The PHP script

          $file = "data3.xml";
          $map_array = array(
              "BOLD"        => "B",
              "EMPHASIS"    => "I",
              "UNDERLINED"  => "U"
          );

          function startElement($parser, $name, $attrs) {
              global $map_array;
              if ($htmltag = $map_array[$name]) {
                  print "<$htmltag>";
              }
          }

          function endElement($parser, $name) {
              global $map_array;
              if ($htmltag = $map_array[$name]) {
                  print "<</$htmltag>";
              }
          }

          function characterData($parser, $data) {
              print $data;
          }

          $xml_parser = xml_parser_create();
          // use case-folding so we are sure to find the tag in $map_array
          xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
          xml_set_element_handler($xml_parser, "startElement", "endElement");
          xml_set_character_data_handler($xml_parser, "characterData");
          if (!($fp = fopen($file, "r"))) {
              die("could not open XML input");
          }

          while ($data = fread($fp, 4096)) {
              if (!xml_parse($xml_parser, $data, feof($fp))) {
                  die(sprintf("XML error: %s at line %d",
                              xml_error_string(xml_get_error_code($xml_parser)),
                              xml_get_current_line_number($xml_parser)));
              }
          }
          xml_parser_free($xml_parser);

The result

"B", "EMPHASIS" => "I", "UNDERINE" => "U" ); function startElement($parser, $name, $attrs) { global $map_array; if ($htmltag = $map_array[$name]) { print "<$htmltag>"; } } function endElement($parser, $name) { global $map_array; if ($htmltag = $map_array[$name]) { print ""; } } function characterData($parser, $data) { print $data; } $xml_parser = xml_parser_create(); // use case-folding so we are sure to find the tag in $map_array xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if (!($fp = fopen($file, "r"))) { die("could not open XML input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); ?>