SAX Lühend lahtikirjutatult on "Simple API for XML" ehk kokkuvõtlikult vahend XMList andmete kätte saamiseks. Ei saa öelda, et see programmeerija tarbeks eelnevalt tutvustatud DOMist lihtsam oleks. Aga masinale on kindlasti. SAXi abil kannatab ka tagasihoidliku arvuti abil hiiglaslikust andmestikust sobivad tulemused välja noppida. Iseenesest on ju võimalik XML-faile lugeda nagu tavalisi tekstifaile. Et reajagu teksti sisse. Sealt sobivad analüüsid teha ning siis jälle järgmine tekstirida lugeda. Kui parasjagu kasutatavas programmeerimiskeeles muid võimalusi pole, siis sealtkaudu saab enamiku kindlasti tehtud. SAXi puhul on aga tööd programmeerija jaoks veidi lihtsustatud. Plokkideks pole enam mitte tekstiread, vaid XMLi elemendid. Reageerimiseks luuakse sobivad funktsioonid. Lihtsaimal juhul vaid teated elemendi alguse ja lõpu kohta. Sellisel juhul pole vaja ise enam tekstifunktsioonidega elemente otsida, vaid piisab sobivale funktsioonile reageerimisest. $xml_parser = xml_parser_create(); loob uue parseriobjekti. xml_set_element_handler($xml_parser, "startElement", "endElement"); määrab, milliste nimedega funktsioonid on vastaval parseril elemendi algusele ja lõpule reageerimiseks. Tavaliselt jäetakse need inglisekeelsed levinud nimed. Ning allpool siis avatakse XMLi fail (või ka näiteks mujalt võrgust veebiaadressi järele tulev voog) lugemiseks. Andmed loetakse plokkide kaupa ning antakse parserile töötlemiseks. Edasi juba saab igaüks funktsioonide sees teha nende andmetega seda, mida ta just vajalikuks peab. Eelmistes peatükkides kasutatud inimeste loetelu puhul saadakse järgmine väljund: Algas INIMESED Algas INIMENE Algas EESNIMI Lõppes EESNIMI Algas PERENIMI Lõppes PERENIMI Algas SYND Lõppes SYND Lõppes INIMENE Algas INIMENE Algas EESNIMI Lõppes EESNIMI Algas PERENIMI Lõppes PERENIMI Algas SYND Lõppes SYND Lõppes INIMENE Algas INIMENE Algas EESNIMI Lõppes EESNIMI Algas PERENIMI Lõppes PERENIMI Algas SYND Lõppes SYND Lõppes INIMENE Algas INIMENE Algas EESNIMI Lõppes EESNIMI Algas PERENIMI Lõppes PERENIMI Algas SYND Lõppes SYND Lõppes INIMENE Algas INIMENE Algas EESNIMI Lõppes EESNIMI Algas PERENIMI Lõppes PERENIMI Algas SYND Lõppes SYND Lõppes INIMENE Lõppes INIMESED Nagu näha, PHP muutis vaikejuhul elementide nimede tähed suurteks. Nimede loendamine Sugugi ei pea kõigile sündmustele reageerima. Kui tahetakse teada saada, et mitu eesnime on, siis piisab ainult elementide algusele reageerimisest. Ning seal saab valikuga kontrollida, et kui elemendi nimi on otsitav, siis see sündmus muutujasse kirja panna. Kokku 5 eesnime. SAXi ülesehitus on programmeerimiskeelte juures suhteliselt sarnane. Et Java on rohkem objektorienteeritud keel, siis tuleb seal luua sündmustele reageeriv objekt. Ehk siis kõigepealt sobivat tüüpi klass ning pärast new-käsuga klassi põhjal objekt. Samast failist saadakse aga ikka samapalju eesnimesid. import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; public class EesnimedeLoendaja extends DefaultHandler{ int eesnimedeArv=0; public void startElement(String nimeruum, String kohalik, String element, Attributes at){ if(element.equals("eesnimi"))eesnimedeArv++; } public void endDocument(){ System.out.println("Leiti "+eesnimedeArv+" eesnime."); } public static void main(String argumendid[]) throws Exception{ XMLReader lappaja= SAXParserFactory.newInstance().newSAXParser().getXMLReader(); lappaja.setContentHandler(new EesnimedeLoendaja()); lappaja.parse("inimesed.xml"); } } Ülesandeid * Loo XML-fail, kus on kirjas autode registreerimisnumbrid. Teata, mitu registreerimisnumbrit failis on. * Teata XML-failis leiduvad kõik erinevad elemendinimed. Andmete püüdmine Elemendisisude kätte saamise jaoks on tüüpilise käskluse nimeks characters. Enamasti saadakse sisu kätte ühekorraga, aga selles ei pruugi kindel olla. Võib vabalt juhtuda, et loetav sisu ei satu ühte plokki ning sel juhul võib see mitme osana kohale jõuda, igal korral käivitatakse characters just selle sisuga. Kui soovitakse saada vaid kindla nimega elemetide sisusid, siis tuleb startElement ning endElement-käskluste sees muutujas lülitina meeles pidada, et kas parajasti tulevat teksti on vaja välja trükkida või mitte. Et kui ollakse eesnime alguse ja lõpu vahel, siis tuleb, muidu mitte. Nagu näha, tulid eesnimed välja: Juku Juku Kalle Mari Oskar Kui soovida kõiki XMLi kirjetes olevaid andmeid püüda, siis üheks võimaluseks on vastavaid muutujaid lihtsalt juurde teha. Ning kui lõppeb element "inimene", siis peaksid selleks ajaks ka kõik selle inimese andmed ükshaaval muutujates olema ning on võimalik andmestikuga seda ette võtta, mis parajasti vajalik on. "; } } function characters($parser, $tekst){ global $kasEesnimi, $kasSynniaasta, $eesnimi, $synniaasta; if($kasEesnimi){$eesnimi=$eesnimi.$tekst;} if($kasSynniaasta){$synniaasta=$synniaasta.$tekst;} } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characters"); $f=fopen("inimesed.xml", "r"); while($andmed=fread($f, 4096)){ xml_parse($xml_parser, $andmed, feof($f)); } xml_parser_free($xml_parser); ?> Juku sündis 1963. aastal. Juku sündis 1961. aastal. Kalle sündis 1975. aastal. Mari sündis 1981. aastal. Oskar sündis 1971. aastal. Ülesandeid * Teata auto registreerimisnumbrite failist kõik need numbrid, mis lõppevad ühe või kahega. * Koosta XML-fail autode registreemisnumbrite, markide ja väljalaskeaastatega. Moodusta SAXi abil SQL-laused nende andmete üle kandmiseks andmebaasi. RSS XML on lihtsalt põhireeglite kogum, mis aitab andmeid masinal kergemini leida ja töödelda. Põhiline XMLi kasutus leiab ikka aset XMLi peale ehitatud vormingus andmeid vahetades. Üheks selliseks levinud vorminguks on RSS. Iseenesest lihtne moodus teadete ülesmärkimiseks ja edasi saatmiseks. Kui järgnevat Eesti Päevalehest pärinevat näidet piiluda, siis on näha, et kõigepealt on kanali pealkiri ja kirjeldus ning siis tulevad üksikud teated. Standardi kinnitamine on vajalik selleks, et eri programmid teaksid samu asju samade nimede alt otsida. Ehk siis pealkirja jaoks on element nimega "title" ning kirjelduse jaoks "description". Hoolimata sellest, et kohustuslikke elemente on suhteliselt vähe, on RSSi kirjeldavas skeemis kirjas päris suur hulk omadusi, mida saab soovi korral sisse panna ning millele on ka nimed antud. Skeemi võib leida aadressilt http://www.thearchitect.co.uk/schemas/rss-2_0.xsd Järgnevalt lõik Eesti Päevalehe RSSist, mida võib lugeda aadressilt http://epl.ee/rss/ Eesti Päevaleht Online Copyright (c) 2006 Eesti Päevalehe AS http://www.epl.ee/ Päevalehe artiklite rss voog. et 5 Eesti Päevaleht Online http://www.epl.ee/ http://www.epl.ee/i/general/logo.gif 144 30 http://www.epl.ee/artikkel/462863 Vahtre: Koivisto puhul kõneles terve mõistus http://www.epl.ee/artikkel/462863 Sat, 21 Mar 2009 20:45:00 +0200 Eesti Päevaleht Online <online@epl.ee> Ajaloos ei saa korraldada eksperimenti ja öelda, milline käitumine oleks õige või vale olnud, arvas ajaloolane ja riigikogu liige Lauri Vahtre kommenteerides Soome riigi käitumist Eesti taasiseseisvumise ajal. http://www.epl.ee/artikkel/462861 Eesti tüdruk filmis kiskjakoera ja tibude sõpruse maailmakuulsaks http://www.epl.ee/artikkel/462861 Sat, 21 Mar 2009 19:59:00 +0200 Eesti Päevaleht Online <online@epl.ee> Texases elav 29aastane Helen Arnold Jürlau on vändanud valmis koduvideo, mida Youtube'is on vaadatud enam kui viis miljonit korda. http://www.epl.ee/artikkel/462860 Harrastuskaluritel jagub Peipsil püügilusti veel küllaga http://www.epl.ee/artikkel/462860 Sat, 21 Mar 2009 19:16:00 +0200 Eesti Päevaleht Online <online@epl.ee> Elukutselistele kaluritele on talvine hooaeg Peipsil juba lõppenud, kuid harrastajatele jagub püügilusti veel küllaga - piirivalveameti prognoosi kohaselt peaksid jääolud lubama järvele minna veel paar nädalat. http://www.epl.ee/artikkel/462778 Politsei unustas norralase Mercedese aastateks parklasse http://www.epl.ee/artikkel/462778 Sat, 21 Mar 2009 00:00:00 +0200 Mirko Ojakivi <online@epl.ee> Auto hoidmine tasulises parklas läheb riigile maksma sadu tuhandeid kroone. Et elementide nimed teada - title all peitub iga uudise pealkiri - siis saab SAXi abil uudisvoost suhteliselt kergesti oma lehele uudiste pealkirjad näidata. Tuleb nende sisu lihtsalt elemendi algul püüdma hakata, characters-käsu juures meelde jätta ning elemendi lõpus sobivana välja trükkida. Uudised

Uudiste loetelu

Ülesandeid * Tutvu RSSi lugemise näitega. * Katseta muudest ajalehtedest ja kohtadest RSSi pealkirjade näitamist. * Täienda näidet nõnda, et oleks näha pealkiri ja lühikirjeldus. * Pealkirjale vajutades avatakse uudisega kaasas käiv viide. * Juhul, kui pealkirja pikkus ületab 20 sümbolit, näidatakse vaid pealkirja algusotsa.