Analyse av en XML-fil ved hjelp av StAX

1. Introduksjon

I denne opplæringen vil vi illustrere hvordan du analyserer en XML-fil ved hjelp av StAX. Vi implementerer en enkel XML-parser og ser hvordan det fungerer med et eksempel.

2. Analyse med StAX

StAX er en av flere XML-biblioteker i Java. Det er et minneeffektivt bibliotek som er inkludert i JDK siden Java 6. StAX laster ikke hele XML i minnet. I stedet trekker den data fra en strøm på en fremadrettet måte. Strømmen leses av en XMLEventReader gjenstand.

3. XMLEventReader Klasse

I StAX er enhver start-tag eller slutt-tag en hendelse. XMLEventReader leser en XML-fil som en strøm av hendelser. Det gir også metodene som er nødvendige for å analysere XML. De viktigste metodene er:

  • isStartElement (): sjekker om den aktuelle hendelsen er en StartElement (start tag)
  • isEndElement (): sjekker om den aktuelle hendelsen er en EndElement (sluttmerke)
  • asCharacters (): returnerer den gjeldende hendelsen som tegn
  • getName (): får navnet til den aktuelle hendelsen
  • getAttributter (): returnerer en Iterator av gjeldende begivenhets attributter

4. Implementere en enkel XML-parser

Det er unødvendig å si at det første trinnet for å analysere en XML er å lese den. Vi trenger en XMLInputFactory å lage en XMLEventReader for å lese filen vår:

XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance (); XMLEventReader reader = xmlInputFactory.createXMLEventReader (ny FileInputStream (bane));

Nå som XMLEventReader er klar, går vi videre gjennom bekken med nextEvent ():

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

Deretter må vi først finne ønsket startkode:

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

Derfor kan vi lese attributtene og dataene:

Streng url = startElement.getAttributeByName (ny QName ("url")). GetValue (); Strengnavn = nextEvent.asCharacters (). GetData ();

Vi kan også sjekke om vi har nådd en sluttkode:

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

5. Analyseeksempel

For å få en bedre forståelse, la oss kjøre parseren vår på en XML-fil:

   Baeldung Online Courses Online Eksempel Eksempler Offline Localhost Tester Offline 

La oss analysere XML og lagre alle dataene i en liste over enheter som heter nettsteder:

mens (reader.hasNext ()) {XMLEvent nextEvent = reader.nextEvent (); hvis (nextEvent.isStartElement ()) {StartElement startElement = nextEvent.asStartElement (); bytte (startElement.getName (). getLocalPart ()) {case "nettsted": nettsted = nytt nettsted (); Attributt url = startElement.getAttributeByName (ny QName ("url")); hvis (url! = null) {website.setUrl (url.getValue ()); } gå i stykker; case "name": nextEvent = reader.nextEvent (); website.setName (nextEvent.asCharacters (). getData ()); gå i stykker; tilfelle "kategori": nextEvent = reader.nextEvent (); website.setCategory (nextEvent.asCharacters (). getData ()); gå i stykker; sak "status": nextEvent = reader.nextEvent (); website.setStatus (nextEvent.asCharacters (). getData ()); gå i stykker; }} hvis (nextEvent.isEndElement ()) {EndElement endElement = nextEvent.asEndElement (); hvis (endElement.getName (). getLocalPart (). er lik ("nettsted")) {websites.add (nettsted); }}}

For å få alle egenskapene til hvert nettsted, sjekker vi startElement.getName (). getLocalPart () for hvert arrangement. Vi setter deretter den tilsvarende egenskapen deretter.

Når vi når nettstedets sluttelement, vet vi at enheten vår er komplett, så vi legger enheten til vår nettsteder liste.

6. Konklusjon

I denne opplæringen lærte vi hvordan du analyserer en XML-fil ved hjelp av StAX-biblioteket.

Eksempel på XML-fil og full parserkode er tilgjengelig som alltid på Github.


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