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>