Simple API for XML
zkrácený název pro Simple API for XML, alternativa oproti DOM From Wikipedia, the free encyclopedia
Remove ads
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ů.
Remove ads
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 />" ;
}
?>
Remove ads
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads