Raščlanjivanje XML datoteke pomoću StAX-a
1. Uvod
U ovom uputstvu ilustrirat ćemo kako raščlaniti XML datoteku pomoću StAX-a. Implementirat ćemo jednostavan XML parser i na primjeru ćemo vidjeti kako to funkcionira.
2. Raščlanjivanje sa StAX-om
StAX je jedna od nekoliko XML knjižnica u Javi. To je memorijski učinkovita knjižnica uključena u JDK od Jave 6. StAX ne učitava cijeli XML u memoriju. Umjesto toga, povlači podatke iz struje samo naprijed. Tok čita an XMLEventReader objekt.
3. XMLEventReader Razred
U StAX-u je svaka početna ili završna oznaka događaj. XMLEventReader čita XML datoteku kao tok događaja. Također pruža metode potrebne za raščlanjivanje XML-a. Najvažnije metode su:
- isStartElement (): provjerava je li trenutni događaj StartElement (početna oznaka)
- isEndElement (): provjerava je li trenutni događaj EndElement (završna oznaka)
- asCharacters (): vraća trenutni događaj kao znakove
- getName (): dobiva ime trenutnog događaja
- getAttributes (): vraća an Iterator atributa trenutnog događaja
4. Implementacija jednostavnog XML parsera
Nepotrebno je reći da je prvi korak za raščlanjivanje XML-a čitanje. Treba nam XMLInputFactory stvoriti XMLEventReader za čitanje naše datoteke:
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance (); Čitač XMLEventReader = xmlInputFactory.createXMLEventReader (novi FileInputStream (put));
Sad kad je XMLEventReader je spremno, krećemo naprijed kroz potok sa nextEvent ():
while (reader.hasNext ()) {XMLEvent nextEvent = reader.nextEvent (); }
Dalje, prvo moramo pronaći željenu početnu oznaku:
if (nextEvent.isStartElement ()) {StartElement startElement = nextEvent.asStartElement (); if (startElement.getName (). getLocalPart (). jednako ("željeno")) {// ...}}
Stoga možemo čitati atribute i podatke:
Niz url = startElement.getAttributeByName (novo QName ("url")). GetValue (); Naziv niza = nextEvent.asCharacters (). GetData ();
Također možemo provjeriti jesmo li dosegli završnu oznaku:
if (nextEvent.isEndElement ()) {EndElement endElement = nextEvent.asEndElement (); }
5. Primjer raščlanjivanja
Da bismo bolje razumjeli, pokrenimo naš parser na uzorku XML datoteke:
Baeldung internetski tečajevi Primjeri na mreži Primjeri izvan mreže Localhost testovi izvan mreže
Analizirajmo XML i pohranimo sve podatke na popis entiteta koji se nazivaju web stranice:
while (reader.hasNext ()) {XMLEvent nextEvent = reader.nextEvent (); if (nextEvent.isStartElement ()) {StartElement startElement = nextEvent.asStartElement (); switch (startElement.getName (). getLocalPart ()) {case "web stranica": web stranica = novo WebSite (); Atribut url = startElement.getAttributeByName (novo QName ("url")); if (url! = null) {website.setUrl (url.getValue ()); } pauza; slučaj "ime": nextEvent = čitač.nextEvent (); website.setName (nextEvent.asCharacters (). getData ()); pauza; slučaj "kategorija": nextEvent = čitač.nextEvent (); website.setCategory (nextEvent.asCharacters (). getData ()); pauza; slučaj "status": nextEvent = čitač.nextEvent (); website.setStatus (nextEvent.asCharacters (). getData ()); pauza; }} if (nextEvent.isEndElement ()) {EndElement endElement = nextEvent.asEndElement (); if (endElement.getName (). getLocalPart (). equals ("web stranica")) {web stranice.add (web stranica); }}}
Da bismo dobili sva svojstva svake web stranice, provjeravamo startElement.getName (). getLocalPart () za svaki događaj. Zatim u skladu s tim postavljamo odgovarajuće svojstvo.
Kad dođemo do završnog elementa web stranice, znamo da je naša cjelina cjelovita, pa je dodajemo u našu web stranice popis.
6. Zaključak
U ovom uputstvu smo naučili kako raščlaniti XML datoteku pomoću StAX knjižnice.
Primjer XML datoteke i puni kod za raščlanjivanje dostupni su, kao i uvijek, na Githubu.