Simple API for XML

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

Příklad použití SAXu v PHP

[editovat | editovat zdroj]
<?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 />" ; 	} ?>