| 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: 12 let
|
|||
0