Zapouzdření obsluhy událostí do objektu

Příklad 7. sax/udalosti-objekt2.php

<?php
Header("Content-type: text/plain; charset=utf-8");

$filename  = "soubor.xml";     // jméno zpracovávaného souboru

// vytvoření parseru
$parser = xml_parser_create_ns();

// nastavení parametů
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);

// vytvoření instance třídy s obslužnými metodami
$handler = new SimpleHandler();

// nastavení objektu, ve kterém se funkce pro obsluhu událostí nacházejí jako metody
xml_set_object($parser, $handler);

// nastavení funkcí pro obsluhu událostí
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characters");

// otevření XML dokumentu s fakturou
$fp = fopen($filename, "r");
if (!$fp) die ("Nelze otevřít soubor: $filename.");

// zpracování celého souboru
while ($data = fread($fp, 4096))
{
  if (!xml_parse($parser, $data, feof($fp)))
    die (sprintf("\nChyba při čtení XML: '%s' na řádce %d sloupec %d (offset %d).\n",
                 xml_error_string(xml_get_error_code($parser)),
                 xml_get_current_line_number($parser),
                 xml_get_current_column_number($parser),
                 xml_get_current_byte_index($parser)));
}

// uvolnění paměti alokované parserem
xml_parser_free($parser);

// třída sdružující obsluhu událostí
class SimpleHandler
{

  // obsluha začátku elementu
  function startElement($parser, $name, $attrs)
  {
    echo "Událost začátek elementu: $name\n";
  }
  
  // zpracování konce elementu
  function endElement($parser, $name)
  {
    echo "Událost konec elementu: $name\n";
  }
  
  // obsluha znakových dat
  function characters($parser, $data)
  {
    echo "Událost znaková data: $data\n";
  }

}
?>