Parsing af en XML-fil ved hjælp af StAX

1. Introduktion

I denne vejledning illustrerer vi, hvordan man analyserer en XML-fil ved hjælp af StAX. Vi implementerer en simpel XML-parser og ser, hvordan det fungerer med et eksempel.

2. Parsing med StAX

StAX er et af de mange XML-biblioteker i Java. Det er et hukommelseseffektivt bibliotek, der er inkluderet i JDK siden Java 6. StAX indlæser ikke hele XML i hukommelsen. I stedet trækker den data fra en stream på en fremadrettet måde. Strømmen læses af en XMLEventReader objekt.

3. XMLEventReader Klasse

I StAX er ethvert starttag eller sluttag en begivenhed. XMLEventReader læser en XML-fil som en strøm af begivenheder. Det giver også de nødvendige metoder til at analysere XML. De vigtigste metoder er:

  • isStartElement (): kontrollerer, om den aktuelle begivenhed er en StartElement (start tag)
  • isEndElement (): kontrollerer, om den aktuelle begivenhed er en EndElement (slutkode)
  • asCharacters (): returnerer den aktuelle begivenhed som tegn
  • getName (): får navnet på den aktuelle begivenhed
  • getAttributter (): returnerer en Iterator af den aktuelle begivenheds attributter

4. Implementering af en simpel XML-parser

Det er overflødigt at sige, at det første skridt til at analysere en XML er at læse den. Vi har brug for en XMLInputFactory at oprette en XMLEventReader til at læse vores fil:

XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance (); XMLEventReader-læser = xmlInputFactory.createXMLEventReader (ny FileInputStream (sti));

Nu hvor XMLEventReader er klar, bevæger vi os frem gennem strømmen med nextEvent ():

mens (reader.hasNext ()) {XMLEvent nextEvent = reader.nextEvent (); }

Dernæst skal vi først finde vores ønskede starttag:

hvis (nextEvent.isStartElement ()) {StartElement startElement = nextEvent.asStartElement (); hvis (startElement.getName (). getLocalPart (). er lig med ("ønsket")) {// ...}}

Derfor kan vi læse attributterne og dataene:

String url = startElement.getAttributeByName (ny QName ("url")). GetValue (); String name = nextEvent.asCharacters (). GetData ();

Vi kan også kontrollere, om vi har nået et slutkode:

hvis (nextEvent.isEndElement ()) {EndElement endElement = nextEvent.asEndElement (); }

5. Analyseeksempel

For at få en bedre forståelse, lad os køre vores parser på en XML-fileksempel:

   Baeldung Online Kurser Online Eksempel Eksempler Offline Localhost Tests Offline 

Lad os analysere XML og gemme alle data i en liste over kaldte enhedsobjekter websteder:

mens (reader.hasNext ()) {XMLEvent nextEvent = reader.nextEvent (); hvis (nextEvent.isStartElement ()) {StartElement startElement = nextEvent.asStartElement (); switch (startElement.getName (). getLocalPart ()) {case "website": websted = nyt websted (); Attribut url = startElement.getAttributeByName (nyt QName ("url")); hvis (url! = null) {website.setUrl (url.getValue ()); } pause; sag "navn": nextEvent = reader.nextEvent (); website.setName (nextEvent.asCharacters (). getData ()); pause; sag "kategori": nextEvent = reader.nextEvent (); website.setCategory (nextEvent.asCharacters (). getData ()); pause; sag "status": nextEvent = reader.nextEvent (); website.setStatus (nextEvent.asCharacters (). getData ()); pause; }} hvis (nextEvent.isEndElement ()) {EndElement endElement = nextEvent.asEndElement (); hvis (endElement.getName (). getLocalPart (). er lig med ("website")) {websites.add (website); }}}

For at få alle egenskaberne på hvert websted skal vi kontrollere startElement.getName (). getLocalPart () for hver begivenhed. Vi indstiller derefter den tilsvarende egenskab i overensstemmelse hermed.

Når vi når webstedets slutelement, ved vi, at vores enhed er komplet, så vi tilføjer enheden til vores websteder liste.

6. Konklusion

I denne vejledning lærte vi hvordan man analyserer en XML-fil ved hjælp af StAX-biblioteket.

Eksempel på XML-fil og den fulde parserkode er som altid tilgængelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found