Parsing XML Hendelser med SAX

June 29  by Eliza

Ordet hendelsen maner frem alle typer bilder. For en nonprogrammer, er en hendelse bare "noe som skjer." Hvis du er vant til å håndtere vinduer og rammer i Java, så har du sannsynligvis tenke på en hendelse som en hendelse som vekker opp en del av koden. For eksempel, en brukers museklikk eller tastetrykk våkner koden som setter et alternativ og viser en OK boks. Klikket eller tastetrykk selv kalles en hendelse fordi det skjer uavhengig av kjørende program. Bare brukeren vet når han eller hun vil trykke på den knappen. Og når knappen blir trykket, noen del av Java-programmet bare våkner opp og tar for seg situasjonen. Dette scenariet kalles hendelsesdrevet programmering.

Hendelsesdrevet programmering

SAX programmer er hendelsesstyrt. For eksempel får du i seng for en god natts søvn. Du nå over til å sette vekkerklokken og deretter bosette seg i, lukke øynene, og bli bevisstløs i flere timer. Da er en viktig hendelse skjer: En viss tid på dagen kommer. Når hendelsen finner sted, går vekkerklokken til sin "vekker" modus - og gjør en forferdelig larm å røre deg ut av din avslappet søvn.

Her er et annet scenario. Du er en travel utøvende og du vil være ute i flere timer, men du ønsker ikke å gå glipp av viktige virksomhet. Før du forlater kontoret, fortelle deg din assistent, "Ring meg om noe viktig kommer opp." Utstede denne ordren er beslektet å sette vekkerklokken. Du forteller din assistent (vekkerklokken) for å vekke deg hvis en hendelse finner sted. Å gjøre denne forespørselen til assistenten (eller til vekkerklokken) kalles registrering. I begge scenario, du registrerer deg med en vekking. Etter at du har registrert deg, kan du følge dine rolig ikke-aktivitet, ignorerer all reell virksomhet inntil noen hendelse skjer. Deretter. . .

Ring, ring. Telefonen er hollering på deg. "Hallo?"

"Hei. Dette er din assistent. Jeg har salgstallene for første kvartal. De er 1 million, 4 millioner, og 2 millioner."

"La oss se. Det er totalt 7 millioner kroner," sier du. "Jeg vil merke det på min Palmpilot. Thanks." Du henger opp.

Flere øyeblikk senere, får du en annen samtale. "Presidenten av Big Bucks, Inc., ønsker å lukke det avtalen. De snakker 10 millioner dollar."

"Hmm," du svare. "Det vil bringe vår år-to-date inntekter opp til 17 megabucks. Jeg skal lagre denne informasjonen i min regnearkprogram. Takk for at du ringer."

Hver av disse interaksjonene er kjent som en tilbakeringing. Tidligere på dagen, når du registrert ditt ønske med assistenten, ba du en tilbakeringing. Deretter, når en hendelse finner sted, gjør assistent et tilbakekall for å varsle deg om hendelsen. I Java-programmering vilkår, kaller assistent en av dine mange metoder (en av Java underprogrammer).

Essensen av hendelsesdrevet programmering

Hendelsesdrevet programmering består av tre deler:

  • Påmelding: Du melder din ønsker å bli varslet når en hendelse inntreffer. Du registrerer dette ønsket med en annen del av koden - en annen gjenstand, vanligvis noe du har importert (for eksempel et stykke kode som er en del av en annens API). Dette objektet deretter klokker, fra bak kulissene, for forekomsten av hendelsen du har angitt.
  • Hendelse: En bestemt hendelse skjer.
  • Tilbakeringing: Den andre delen av koden utfører en tilbakeringing. En av dine metoder blir kalt.

To typer kode

Skille mellom aktiv kode og passiv kode er nyttig:

  • Aktiv kode har en hovedmetode. Aktiv kode, når det begynner å gå, tar sentrum scene. Aktiv kode inneholder tråden henrettelses som styrer hele ball spillet.
  • Passiv kode bare sitter der og venter på å bli kalt. En passiv Dice klassen gjør ingenting før noen annen kode kaller Dice.roll ().

Nå kan du tror at passiv kode er alt du trenger for hendelsesdrevet programmering, men det er ikke. For event håndtering, trenger du denne registreringen trinn. Den passive kode starter ved å bli registrert med noen annen del av koden.

Til firmaet opp denne forestillingen om registrering, tenk om et eksempel fra verden av mus, vinduer og knapper på skjermen. Du oppretter et vindu eller ramme. Du vil at rammen for å svare på museklikk, så du utstede følgende kommando:

button.addMouseListener (denne);

Denne kommandoen registrerer ramme med knappen. Kommandoen sier, i kraft, når en mus hendelse skjer, ringe en av rammens mus håndteringsmetoder. Senere, når brukeren klikker på musen, blir rammen en tilbakeringing. Datamaskinen kaller rammens mouseClicked metode.

SAX hendelser

Jada, er SAX hendelsesdrevet, men dette betyr ikke at en SAX program venter på museklikk ikke. I stedet følger SAX kode register-event-tilbakeringing modellen beskrevet i de siste avsnittene. Hver SAX Programmet har to uunnværlige deler av koden:

  • Et stykke kode som du skriver -. Kalt behandleren (Din behandleren kan forlenge en pre-skrevet DefaultHandler klasse.)

Behandleren er som millioner dollar direktør i foregående avsnitt.

  • Et stykke kode som du normalt ikke skrive -. Parseren Tolkeren spiller en rolle som det av den utøvende assistent. Java 1.4 API har en innebygd parser. Du oppretter en forekomst av dette parser, og deretter du registrere din handler med at parseren eksempel. I effekt, fortelle deg forekomsten å ringe tilbake din handler når en hendelse finner sted.

Alt som har å gjøre med XML er ny, og er fortsatt i en tilstand av forandring. På grunn av dette, er terminologien lappet sammen i noen spesielle måter. Mens utvikle SAX versjon 2, noen Teknologikyndige hadde en make-up-nye-navn festival. Det som vanligvis kalles en "parser" er nedfelt i en Java-grensesnitt som heter XMLReader. Det pleide å være en klasse som heter org.xml.sax.Parser, men klassen ble frarådet (noe som betyr at du bør skrape det av bunnen av skoen). For å gjøre ting litt mer komplisert, det er fortsatt en annen analyseverktøyet, javax.xml.parsers.SAXParser. Du bruker denne SAXParser å gjøre deg selv en XMLReader. Med litt hell, vil du raskt bli vant til dette convoluted terminologi. For nå, husk at det som kalles en "parser" er vanligvis en forekomst av XMLReader.

Registeret-og-tilbakeringing scenariet er det som gjør SAX hendelsesdrevet. Nå det morsomme er, en SAX hendelsen er ikke håndgripelig. En SAX hendelsen vil ikke minne deg om et tastetrykk eller en knapp klikk. I SAX, skanner parser et XML-dokument fra topp til bunn. Når parseren møter noe interessant, fyrer parser av en hendelse og kaller behandleren. Deretter er det opp til behandleren til å gjøre noe med dette interessant møte.