Jednoduchý parser jsme si vytvořili už minule. K tomu, abychom mohli efektivně využívat všech možností, které nám dvojice PHP a XML nabízí, ale musíme znát ještě několik dalších funkcí.

Obsluha instrukcí zpracování

Co je to instrukce zpracování? Jedná se o kód určený pro nějakou konkrétní aplikaci. Je uzavřený mezi <? a ?>. První slovo následuje ihned bez mezery za <? a obsahuje název aplikace, pro kterou je kód určen. Takto vypadá instrukce zpracování pro PHP:

<?php echo(„HELLO WORLD!“); ?>

Syntaxe registrační funkce instrukcí zpracování je následující:

int xml_set_processing_function_handler(int parser, string funkceproinstrukcezpracovani);

Obslužná funkce zaregistrovaná pomocí xml_set_processing_function_handler musí mít sytaxi následující:

function funkceproinstrukcezpracovani(int parser, string program, string data);

Pokud budeme chtít například provést všechny PHP příkazy v dokumentu, kód bude vypadat takto:

function instrukcezpracovani($parser, $program, $instrukce) {
if(eregi($program,“PHP“)) eval($instrukce);
}

Výchozí obsluha

Funkce zaregistrovaná jako výchozí obsluha bude volána, když parser narazí na jakoukoli část dokumentu, která nemá přiřazenu obslužnou funkci. Funkci registrujeme pomocí set_default_handler

int set_default_handler(int parser, string vychoziobsluha);

Syntaxe funkce, která bude zaregistrována jako výchozí obsluha je velmi jednoduchá:

vychoziobsluha(int parser, string neobsluhovanytext);

Příklad:

function vychoziobsluha($parser, $neobsluhovanytext) {
echo($neobsluhovanytext);
}
set_default_handler($parser, „vychoziobsluha“);

Nastavení možností parseru

Další možnosti parseru můžeme nastavit zavoláním funkce xml_parser_set_option. U té můžeme nastavit, jestli se mají názvy elementů převádět na velká písmena (XML_OPTION_CASE_FOLDING) a určit cílové kódování (XML_OPTION_TARGET_ENCODING). Převádění názvů elementů na velká písmena může být velmi užitečné, někdy však i na obtíž. Problém tkví v tom, že hodnota této možnosti je standardně nastavena na true, což znamená, že se při výchozím nastavení malá písmena na velká převádějí. Cílové kódování doporučuji ponechat beze změny, protože parser umí takto pracovat pouze s UTF-8 a ISO-8859-1. Ostatní kódování nepodporuje.

Funkce má tuto syntaxi:

int xml_parser_set_option(int parser, int možnost, mixed hodnota);

Nastavení je nutno provést ještě před tím, než parser začne zpracovávat dokument (jako je to u obslužných funkcí). Příklad:

xml_parser_set_option($parser, XML_OPTION_CASE FOLDING, false);

Uvolnění parseru

Po zpracování XML dokumentu by se měly uvolnit systémové prostředky přiřazené parseru a parser se vymaže. Pokud tuto operaci potřebujeme z jakéhosi důvodu vyřešit „po svém“ (obvykle je to třeba při zpracovávání dokumentu), jsme odkázáni na funkci xml_parser_free(). Ta má jednoduchou syntaxi:

int xml_parser_free(int parser);

A použijeme ji takto:

xml_parser_free($parser);

Další funkce

xml_get_current_line_number
int xml_get_current_line_number(int parser);
Vrací číslo aktuální řádky.

xml_get_current_column_number
int xml_get_current_column_number(int parser);
Vrací číslo aktuálního znaku v řádku.

xml_get_current_byte_index
int xml_get_current_byte_index(int parser);
Vrací aktuální pozici v souboru.

xml_get_error_code
int xml_get_error_code(int parser);
Pokud vrátí funkce xml_parse hodnotu false, stala se chyba a tato funkce vrácí její kód.

xml_get_error_string
string xml_get_error_string(int kodchyby);
Pokud dostaneme od funkce xml_get_error_code chybový kód, můžeme ho převést na popis chyby pomocí této funkce.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět