Simple API for XML
Author
Albert FloresTato stránka na české Wikipedii obsahuje popis a vysvětlení Simple API for XML (SAX), což je rozhraní pro zpracování XML dokumentů. Sax je událostmi řízený přístup, který umožňuje čtení a zpracování velkých XML souborů efektivně a s minimálním využitím paměti. Tento článek poskytuje přehled SAX API, včetně popisu jeho komponent, takových jako událostní generátory, manipulátory obsluhující události a sady rozhraní pro čtení a zápis XML dat. Taktéž jsou zde uvedeny různé příklady použití SAX API pro analýzu a validaci XML dokumentů.
Simple API for XML (zkráceně SAX) umožňuje sériový přístup ke XML. Jde o tzv. proudové zpracování, při kterém se dokument rozdělí na jednotlivé jeho části (počáteční a koncové značky, obsahy elementů, komentáře, atd.). Postupně se pak volají jednotlivé události, které ohlašují nalezení konkrétní části. Způsob zpracování těchto jednotlivých událostí je pak již plně v kompetenci programátora.
Tato metoda vypadá na první pohled velice náročně, své uplatnění však má v konkrétních složitějších způsobech zpracování XML, zvláště tam, kde se k dokumentu nepřistupuje náhodně, ale sekvenčně se postupně čte celý obsah. Její další výhoda spočívá v rychlosti zpracovávání a menší paměťové náročnosti. +more Oproti DOMu bývá několikrát rychlejší, což u větších dokumentů může značně zkrátit čas vykonávání jednotlivých skriptů.
Příklad použití SAXu v PHP
parser = xml_parser_create;
// při nalezení počátečního a koncového tagu se bude volat funkce onStartElement a onEndElement xml_set_element_handler($this->parser, "onStartElement", "onEndElement");
// nastavení funkce pro zpracování obsahu tagů na onContent xml_set_character_data_handler($this->parser, "onContent");
// postupné čtení vstupního souboru (zde example. xml) if ($f = fopen("example. +morexml","r")) { // čtení souboru po 4 KB a jeho zpracovávání parserem while ($xml_data = fread($f,4096)) if (. $this->parseString($xml_data, feof($f))) { // vrátí-li metoda nulovou hodnotu, došlo k chybě echo "Chyba parsování. "; } fclose($f); }.
// tato funkce je volána při nalezení počátečního tagu function onStartElement($parser, $elementName, $attributes) { echo "nalezen počátečni tag s názvem $elementName: "; foreach ($attributes as $nazev => $hodnota) echo " atribut $nazev = '$hodnota';\n"; echo "\n"; }
// tato funkce je volána při nalezení koncového tagu function onEndElement($parser, $elementName) { echo "nalezen koncový tag s názvem $elementName: "; }
// tato funkce je volána poté, co je znám obsah elementu function onContent ($parser, $content) { echo "obsah elementu: ".$content." " ; } ?>