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
Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads