07/KurzySAX.php


  1  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
  2  <html>
  3  <head>
  4    <meta http-equiv="Author" content="Imrich BURANSKY" />
  5    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1250" />
  6    <title>Kurzy SAX</title>
  7  </head>
  8  <body>
  9  <div>
 10  <h2>Kurzy SAX</h2>
 11  <?php
 12  
 13  class CKurzSAX
 14  {
 15    // Členské premenné - obsah prvkov XML dokumentu
 16    var $ccyCode = "";
 17    var $amount = "x";
 18    var $value = "???";
 19    // Iné členské premenné
 20    var $HladanaMena = "";
 21    var $Chyba = "";
 22    var $data = "";
 23    var $Koniec = false;
 24  
 25    // Konštruktor
 26    public function __construct($HladanaMena)
 27    {
 28      $this->NajdiKurz($HladanaMena);
 29    }
 30  
 31    function NajdiKurz($HladanaMena)
 32    {
 33      $this->HladanaMena = $HladanaMena;
 34  
 35      $xml_parser = xml_parser_create();
 36      // Definovať vlastnosť - ponechať veľkosť písmen značiek
 37      xml_parser_set_option($xml_parser,
 38        XML_OPTION_CASE_FOLDING, false);
 39      // Oznámiť parseru objekt, ktorý ho využíva
 40      xml_set_object($xml_parser, $this);
 41      // Určiť funkcie, ktoré bude parser valať pri narazení
 42      // na počiatočné a koncové označenie.
 43      xml_set_element_handler($xml_parser,
 44        "startElement", "endElement");
 45      // Určiť funkciu preberajúcu data
 46      xml_set_character_data_handler($xml_parser,"Data");
 47      // Otvorit XML subor
 48      $Subor = "aktklsl.xml";
 49      if (!($fp = fopen($Subor, "r")))
 50      { $this->m_Chyba="Nepodarilo sa otvoriť súbor ". $Subor;
 51        return;
 52      }
 53      // Spracovať XML subor
 54      while (($CastSuboru = fread($fp, 4096)) &&  (!$this->Koniec) )
 55      {
 56        if (!xml_parse($xml_parser, $CastSuboru, feof($fp)))
 57        { $this->m_Chyba=sprintf("Chyba XML v riadku %d: %s ",
 58          xml_get_current_line_number($xml_parser),
 59          xml_error_string(xml_get_error_code($xml_parser)) );
 60          break;
 61        }
 62      }
 63      // Zrušiť XML parser
 64      xml_parser_free($xml_parser);
 65      // Zatvoriť súbor
 66      fclose ($fp);
 67    }
 68  
 69    function startElement($parser, $name, $attrs)
 70    {
 71      // Obslužná funkcia, ktorú volá XML parser pri narazení
 72      // na počiatočné označenie prvku. Je uzitocna vtedy najma vtedy,
 73      // ak prvok ma atributy - tu ich dostaneme v podobe asociativneho pola.
 74      // Kurzovy listok NBS atributy nema, a tak sa bez funkcie zaobideme.
 75    }
 76  
 77    function endElement($parser, $name)
 78    {
 79      // Obslužná funkcia, ktorú volá XML parser pri narazení
 80      // na koncové označenie prvku.
 81      // Obsluha je zavisla od toho, ktory element sa konci
 82      if ( $this->Koniec) return;
 83      if ($name == "ccyCode") $this->ccyCode =  $this->data;
 84      if ($name == "amount")  $this->amount  =  $this->data;
 85      if ($name == "value")   $this->value  =  $this->data;
 86      if ($name == "rate")
 87      { // Ak sa jedna o prvok s hladanou menou - nastavim podmienku
 88        // pre skoncenie inak vynulujem nazbierane hodnoty
 89        if ($this->ccyCode == $this->HladanaMena)
 90        {
 91          $this->Koniec = true;
 92        }
 93        else
 94        { // priradim neplatne hodnoty hladanym hodnotam
 95          $this->ccyCode = "";
 96          $this->amount = "x";
 97          $this->value = "???";
 98        }
 99      }
100    }
101  
102    function Data($parser, $cdata)
103    {
104      // Obslužná funkcia, ktorú volá XML parser pri narazení
105      // na data prvku. Odlozim ich do clenskej premennej.
106      $this->data=$cdata;
107    }
108  }
109  
110  $HladanaMena="";
111  if (isset($_REQUEST["ccyCode"])) $HladanaMena=$_REQUEST["ccyCode"];
112  
113  echo "
114    <form action='KurzySAX.php' method='post'>
115      <div>Kód meny</div>
116      <input type='text' name='ccyCode' value='$HladanaMena' />
117      <input type='submit' value='Zisti kurz' />
118    </form>";
119  if ($HladanaMena!="")
120  {
121    $Kurz = new CKurzSAX($HladanaMena);
122  
123    echo "
124    <div>$Kurz->value SK za $Kurz->amount $HladanaMena </div>
125  ";
126  }
127  ?>
128  </div>
129  </body>
130  </html>

« Späť