FazBrowse Wikipedia Viewer | Main Page |
Search Wikipedia:
|
Viewing: https://cs.wikipedia.org/wiki/Simple_API_for_XML

Simple API for XML – Wikipedie

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

editovateditovat zdroj
parser = xml_parser_create();\n\n\t// při nalezení počátečního a koncového tagu se bude volat funkce onStartElement() a onEndElement\n\txml_set_element_handler($this->parser, \"onStartElement\", \"onEndElement\");\n\n\t// nastavení funkce pro zpracování obsahu tagů na onContent()\n\txml_set_character_data_handler($this->parser, \"onContent\");\n\n\t// postupné čtení vstupního souboru (zde example.xml)\n\tif ($f = fopen(\"example.xml\",\"r\"))\n\t{\n\t\t// čtení souboru po 4 KB a jeho zpracovávání parserem\n\t\twhile ($xml_data = fread($f,4096))\n\t\t\tif (!$this->parseString($xml_data, feof($f)))\n\t\t\t{ // vrátí-li metoda nulovou hodnotu, došlo k chybě\n\t\t\t\techo \"Chyba parsování!\";\n\t\t\t}\n\t\tfclose($f);\n\t}\n\n\t// tato funkce je volána při nalezení počátečního tagu\n\tfunction onStartElement($parser, $elementName, $attributes)\n\t{\n\t\techo \"nalezen počátečni tag s názvem $elementName: \";\n\t\tforeach ($attributes as $nazev => $hodnota)\n\t\t\techo \" atribut $nazev = '$hodnota';\\n\";\n\t\techo \"\\n\";\n\t}\n\n\t// tato funkce je volána při nalezení koncového tagu\n\tfunction onEndElement($parser, $elementName)\n\t{\n\t\techo \"nalezen koncový tag s názvem $elementName: \";\n\t}\n\n\t// tato funkce je volána poté, co je znám obsah elementu\n\tfunction onContent ($parser, $content)\n\t{\n\t\techo \"obsah elementu: \".$content.\"<br />\" ;\n\t}\n?>\n"}}'><?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 />" ; } ?>

View original on Wikipedia | Back | FazBrowse Home