StAX

Streaming API for XML (StAX) er et applikasjonsprogrammeringsgrensesnitt ( API ) for lesing og skriving av XML -dokumenter , som kommer fra Java-programmeringsspråksamfunnet .

Tradisjonelt er XML APIer en av to typer:

Begge har fordeler, førstnevnte (f.eks . DOM ) gir tilfeldig tilgang til dokumentet, sistnevnte (f.eks . SAX ) krever et lite minneavtrykk og er vanligvis mye raskere.

Disse to tilgangsparadigmene kan betraktes som polare motsetninger. En trebasert API tillater ubegrenset tilfeldig tilgang og manipulering, mens en hendelsesbasert API er en "engangs"-passering gjennom kildedokumentet.

StAX ble designet som en mellomting mellom disse to polare motsetningene. I StAX-paradigmet er programmeringsinngangspunktet en markør som representerer et punkt i dokumentet. Appen flytter markøren fremover ("trekker" parserinformasjonen etter behov). Dette er forskjellig fra en hendelsesbasert API, for eksempel SAX, som "pusher" data til applikasjonen (krever at applikasjonen opprettholder tilstanden mellom hendelser da det er nødvendig å holde styr på plassering i dokumentet).

Opprinnelse

StAX har sine røtter i en rekke inkompatible XML pull APIer, spesielt XMLPULL , hvor forfatterne (Stefan Haustein og Aleksander Slominski) samarbeidet med blant annet BEA Systems , Oracle , Sun og James Clark .

Eksempler

Fra den endelige spesifikasjonen til JSR-173 V1.0 (brukt under rimelig bruk).

Dato:

Følgende Java API viser hovedmetodene for å lese XML på markørfokus. offentlig grensesnitt XMLStreamReader { public int next () kaster XMLStreamException ; public boolean hasNext () kaster XMLStreamException ; offentlig streng getText (); offentlig streng getLocalName (); offentlig streng getNamespaceURI (); // ...andre metoder vises ikke } Skrivedelen av APIen har metoder som tilsvarer lesedelen for hendelsestypene "StartElement" og "EndElement". offentlig grensesnitt XMLStreamWriter { public void writeStartElement ( String localName ) kaster XMLStreamException ; public void writeEndElement () kaster XMLStreamException ; public void writeCharacters ( String text ) kaster XMLStreamException ; // ...andre metoder vises ikke } 5.3.1 XMLStreamReader Dette eksemplet illustrerer hvordan du instansierer en inndatafabrikk, oppretter en leser og itererer over elementene i et XML-dokument. XMLInputFactory xmlInputFactory = XMLInputFactory . newInstance (); xmlStreamReader xmlStreamReader = xmlInputFactory . createXMLStreamReader (...); while ( xmlStreamReader . hasNext ()) { xmlStreamReader . neste (); }

Se også

Utfyllende måter å behandle XML i Java på:

  • Document Object Model (DOM) , den første språk/plattformuavhengige, standardiserte trebaserte XML-behandlingsmodellen, alternative Java-tremodeller inkluderer JDOM , Dom4j og XOM .
  • Enkel API for XML (SAX) , push-typen XML API-standard.
  • Java XML Binding API (JAXB) , fungerer på toppen av en annen parser (vanligvis en streaming-parser), binder data som finnes i/til Java-objekter.
  • XML-streaming
  • XQuery API for Java

Eksterne lenker

Java-implementeringer Verktøy og tillegg
  • StAX-Utils Gir et sett med verktøyklasser som gjør det enkelt for utviklere å integrere StAX i sine eksisterende XML-behandlingsapplikasjoner.
    • StAX-Utils inkluderer klasser for å gi XML-filinnrykk og formatering.
  • StaxMate er et lett rammeverk som bygger på toppen av Stax API og gir mer praktisk nestet/filtrert markør for lesing av xml, nestede utdatare for å skrive xml (med valgfri innrykk) og andre verktøy (bygg DOM fra Stax-kilder, skriv til Stax-destinasjoner ) for interoperabilitet.
Analysatorer bygget på StAX
  • Apache Axiom er en lettvekts XML-objektmodell basert på toppen av Stax og gir også lat objektbygging.
  • Apache Pivot bruker StAX for serialisering av brukergrensesnittmarkering skrevet i BXML .
  • JavaFX 2.0 bruker StAX for serialisering av brukergrensesnittmarkering skrevet i FXML .
Ikke-standard analysatorer som ligner på StAX
  • XPP Parser basert på den svært like, men eldre XMLPull API.
  • kXML En Java Micro Edition-parser som bruker XMLPull API.
  • Javolution gir en sanntids StAX-lignende implementering som ikke tvinger objektoppretting (f.eks. String) og har mindre effekt på minneavtrykk/søppelsamling (Merk: for å redusere objektoppretting vedlikeholder de fleste StAX-implementeringer oppslagstabeller for å hente og gjenbruk ofte brukt Strengeobjekter).
  • XmlReader -klassen i Microsofts .NET Framework er en XML-parser i pull-stil .
Ikke-Java pull-type XML-parsere
  • Qt har XML-parser (QXmlStreamReader) og writer (QXmlStreamWriter)
  • irrXML er en enkel og rask åpen kildekode XML-parser for C++
  • LlamaXML er XML C++ pull parser og writer
  • libxml2 er XML C-parser og verktøysett (MIT-lisens)
  • Expat er et XML-parserbibliotek skrevet i C
Artikler og ressurser Last ned JSR-spesifikasjonsdokument som pdf her: last ned nå