Autor | Zpráva | ||
---|---|---|---|
Karel+ěš Profil |
#1 · Zasláno: 22. 6. 2013, 15:45:56
Mám dotaz, koukal jsme na http://www.linuxsoft.cz/article.php?id_article=459 všemu rozumím až na jednu věc a to ... kde se vzaly ty hodnoty ve funkci pocatecniZnacka ($nazev, $ atributy), me prijde , že je nikde nepřidělil ?
|
||
Rfilip Profil |
#2 · Zasláno: 22. 6. 2013, 16:02:25
Jsou přiděleny xml_parserem vytvořeným řádkem
$nas_parser=xml_parser_create(); , který volá funkce urcené řádkem xml_set_element_handler ($nas_parser, "PocatecniZnacka", "KoncovaZnacka"); s parametry dle dokumentace k funkci xml-set-element-handler
|
||
Karel+ěš Profil |
#3 · Zasláno: 22. 6. 2013, 16:23:40
jojo do dokumentace jsme koukal ... rozumim tomu tak, ze xml_set_element_handler ($nas_parser, "PocatecniZnacka", "KoncovaZnacka") atributy pridelili automaticky znacky k promennym ?
Ted jsem to vyzkousel a když jsme to zaměnil vyšel mi jiný výsledek. Tak díky. |
||
Rfilip Profil |
#4 · Zasláno: 22. 6. 2013, 16:44:10
Asi jsi dokumentaci nečetl pořádně, 2 parametr tedy "PocatecniZnacka" je jméno funkce která se volá na každem počátečním tagu, 3 parametr tedy "KoncovaZnacka" je jméno funkce která se volá na každém koncovém tagu
|
||
juriad Profil |
#5 · Zasláno: 22. 6. 2013, 16:51:15
Ne.
Funkce xml_set_element_handler předá našemu parseru název dvou funkcí. V jiných jazycích by předala přímo ty dvě funkce. $nas_parse si ty funkce uloží a až bude pociťovat, že je to vhodné, tak je zavolá.
Není to žádná magie, následuje hódně ořezaný příklad, jak by parser mohl fungovat: <?php class Parser { private $funkcePocatek; private $funkceKonec; function setFunkcePocatek($pocatek) { $this->funkcePocatek = $pocatek; } function setFunkceKonec($konec) { $this->funkceKonec = $konec; } function parse($text) { for($i = 0; $i < strlen($text); $i++) { # jde po znacích if($text[$i] == '<' && $text[$i+1] != '/') { # je znak < a nenásleduje / call_user_func($this->funkcePocatek,$text[$i+1]); # zavolej počátek } else if($text[$i] == '/') { # je znak / call_user_func($this->funkceKonec,$text[$i+1]); # zavolej konec } } } } function createParser() { return new Parser(); } function setHandlers($parser, $pocatek, $konec) { $parser->setFunkcePocatek($pocatek); $parser->setFunkceKonec($konec); } function parse($parser, $text) { $parser->parse($text); } ###### $p = createParser(); function poc($element) { echo "zacina element: " . $element . "\n"; } function kon($element) { echo "konci element: " . $element . "\n"; } setHandlers($p, 'poc', 'kon'); parse($p, '<a><b>ahoj</b><b>nazdar</b></a>'); |
||
Karel+ěš Profil |
#6 · Zasláno: 23. 6. 2013, 09:12:49
Rfilip joo cetl, me ze zacatku neslo do hlavy jak se v ty funkci nastavej ty promenny ...fce "PocatecniZnacka" ma napr. promenou $nazev a ja nechapal jak se ji pridelila ta hodnota ...ted uz je mi to jasne.
Diky Juriad diky za priklad. |
||
Časová prodleva: 11 let
|
0