StAX
Streaming API til XML (StAX) er en applikationsprogrammeringsgrænseflade ( API ) til læsning og skrivning af XML -dokumenter , der stammer fra Java-programmeringssprogsamfundet .
Traditionelt er XML API'er en af to typer:
- DOM-baseret - hele dokumentet læses ind i hukommelsen som en træstruktur for tilfældig adgang af den kaldende applikation
- hændelsesbaseret - applikationen registrerer sig for at modtage hændelser baseret på de enheder, der findes i kildedokumentet.
Begge har fordele, førstnævnte (f.eks. DOM ) tillader vilkårlig adgang til dokumentet, sidstnævnte (f.eks. SAX ) kræver et lille hukommelsesfodaftryk og er typisk meget hurtigere.
Disse to adgangsparadigmer kan betragtes som polære modsætninger. En træbaseret API tillader ubegrænset tilfældig adgang og manipulation, mens en begivenhedsbaseret API er en 'engangs' gennemgang af kildedokumentet.
StAX blev designet som en mellemting mellem disse to modsætninger. I StAX-paradigmet er programmeringsindgangspunktet en markør, der repræsenterer et punkt i dokumentet. Appen flytter markøren frem ("trækker" parseroplysningerne efter behov). Dette er forskelligt fra en hændelsesbaseret API, såsom SAX, der "pusher" data til applikationen (kræver, at applikationen opretholder tilstanden mellem hændelser, da det er nødvendigt at holde styr på placeringen i dokumentet).
Oprindelse
StAX har sine rødder i en række inkompatible XML pull API'er, især XMLPULL , hvis forfattere (Stefan Haustein og Aleksander Slominski) samarbejdede med blandt andre BEA Systems , Oracle , Sun og James Clark .
Eksempler
Fra den endelige specifikation af JSR-173 V1.0 (brugt under fair use).
Dato:
- Følgende Java API viser de vigtigste metoder til at læse XML på markørfokus.
public interface 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 af API'et har metoder, der svarer til læsedelen for "StartElement" og "EndElement" begivenhedstyper.
public interface 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 eksempel illustrerer, hvordan man instansierer en inputfabrik, opretter en læser og gentager elementerne i et XML-dokument.
XMLInputFactory xmlInputFactory = XMLInputFactory . newInstance ();
xmlStreamReader xmlStreamReader = xmlInputFactory . createXMLStreamReader (...);
while ( xmlStreamReader . hasNext ()) {
xmlStreamReader . næste ();
}
Se også
Supplerende måder at behandle XML på i Java:
- Document Object Model (DOM) , den første sprog/platform-uafhængige, standardiserede træbaserede XML-behandlingsmodel, alternative Java-træmodeller inkluderer JDOM , Dom4j og XOM .
- Simpel API til XML (SAX) , push-typen XML API-standard.
- Java XML Binding API (JAXB) , fungerer oven på en anden parser (normalt en streaming parser), binder data indeholdt i/til Java-objekter.
- XML streaming
- XQuery API til Java
Eksterne links
- Java implementeringer
- Sun Java StAX XML-processor ( brudt link tilgængeligt på Internet Archive ; se historik , første og seneste version ). Open source. Sendes som en del af Sun Java Standard Edition 6 runtime.
- Referenceimplementering (for JSR-173, API-specifikation, under Apache-softwarelicensen )
- Woodstox Open source StAX implementering (LGPL eller Apache licens)
- Aalto er en ultra-højtydende parser (Apache-licens)
- Hjælpeprogrammer og tilføjelser
- StAX-Utils Giver et sæt hjælpeklasser, der gør det nemt for udviklere at integrere StAX i deres eksisterende XML-behandlingsapplikationer.
- StAX-Utils inkluderer klasser til at give XML-filindrykning og formatering.
- StaxMate er en letvægtsramme, der bygger oven på Stax API og giver mere praktisk indlejret/filtreret markør til læsning af xml, indlejrede outputtere til at skrive xml (med valgfri indrykning) og andre værktøjer (byg DOM fra Stax-kilder, skriv til Stax-destinationer ) for interoperabilitet.
- Analysatorer bygget på StAX
- Apache Axiom er en letvægts XML-objektmodel baseret på toppen af Stax og giver også doven objektbygning.
- Apache Pivot bruger StAX til serialisering af brugergrænseflademarkering skrevet i BXML .
- JavaFX 2.0 bruger StAX til serialisering af brugergrænseflademarkering skrevet i FXML .
- Ikke-standard analysatorer, der ligner StAX
- XPP Parser baseret på den meget lignende, men ældre XMLPull API.
- kXML En Java Micro Edition-parser, der bruger XMLPull API.
- Javolution leverer en real-time StAX-lignende implementering, som ikke fremtvinger objektoprettelse (f.eks. streng) og har mindre effekt på hukommelsesfodaftryk/affaldsindsamling (Bemærk: for at reducere objektoprettelse vedligeholder de fleste StAX-implementeringer opslagstabeller for at hente og genbruge ofte brugte Stringobjekter).
- 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 hurtig open source XML-parser til C++
- LlamaXML er XML C++ pull-parseren og forfatteren
- libxml2 er XML C-parseren og værktøjssættet (MIT-licens)
- Expat er et XML-parserbibliotek skrevet i C
- Artikler og ressourcer
- Introduktion til StAX XML.com, Harold, Elliotte Rusty
- Java Streaming API til XML (Stax) - Selvstudium
- JSR (#173)
- Download JSR-specifikationsdokument som pdf her: download nu
- XMLPull Patterns Artikel om XML Pull (og StAX) designmønstre af Aleksander Slominski.
- XMLPull.org
- StAX og Sax sammenligning.
- Brug af StAX med JAXB for effektivitet
- StAX og Java f.eks. fra DevX.com