Simple API for XML

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

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. 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ů.

[editovat] Příklad použití SAXu v PHP

<?php
        // vytvoření nového SAX parseru
        $this->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.xml","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."<br />" ;
        }
?>
Osobní nástroje
Jmenné prostory

Varianty
Akce
Navigace
Tisk/export
Nástroje
V jiných jazycích