XML fájl elemzése StAX használatával

1. Bemutatkozás

Ebben az oktatóanyagban bemutatjuk, hogyan elemezzen egy XML fájlt a StAX segítségével. Megvalósítunk egy egyszerű XML elemzőt, és egy példával megnézzük, hogyan működik.

2. Parsálás a StAX-szal

A StAX egyike a Java számos XML könyvtárának. Ez egy memória-hatékony könyvtár, amely a Java 6 óta szerepel a JDK-ban. A StAX nem tölti be a teljes XML-t a memóriába. Ehelyett csak továbbítja az adatokat egy adatfolyamból. A folyamot egy XMLEventReader tárgy.

3. XMLEventReader Osztály

A StAX-ben minden kezdőcímke vagy végcímke esemény. XMLEventReader események folyamaként olvas XML fájlt. Megadja az XML elemzéséhez szükséges módszereket is. A legfontosabb módszerek:

  • isStartElement (): ellenőrzi, hogy az aktuális esemény a StartElement (kezdőcímke)
  • isEndElement (): ellenőrzi, hogy az aktuális esemény egy EndElement (végcímke)
  • asCharacters (): az aktuális eseményt adja vissza karakterként
  • getName (): megkapja az aktuális esemény nevét
  • getAttributes (): visszatér egy Iterátor az aktuális esemény attribútumai közül

4. Egyszerű XML-elemző megvalósítása

Mondanom sem kell, hogy az XML elemzésének első lépése az elolvasása. Szükségünk van egy XMLInputFactory létrehozni egy XMLEventReader fájlunk olvasásához:

XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance (); XMLEventReader olvasó = xmlInputFactory.createXMLEventReader (új FileInputStream (elérési út));

Most, hogy a XMLEventReader készen áll, haladunk előre a patakban nextEvent ():

while (olvasó.hasNext ()) {XMLEvent nextEvent = olvasó.nextEvent (); }

Ezután először meg kell találnunk a kívánt kezdőcímkét:

if (nextEvent.isStartElement ()) {StartElement startElement = nextEvent.asStartElement (); if (startElement.getName (). getLocalPart (). egyenlő ("kívánt")) {// ...}}

Következésképpen elolvashatjuk az attribútumokat és az adatokat:

Karakterlánc URL = startElement.getAttributeByName (új QName ("url")). GetValue (); Karakterlánc neve = nextEvent.asCharacters (). GetData ();

Azt is ellenőrizhetjük, hogy elértük-e a végcímkét:

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

5. Példa elemzésre

A jobb megértés érdekében futtassuk az elemzőnket egy minta XML fájlon:

   Baeldung Online tanfolyamok Online példák Offline Localhost tesztekre offline 

Elemezzük az XML-t, és tároljuk az összes adatot az úgynevezett entitásobjektumok listájába weboldalak:

while (olvasó.hasNext ()) {XMLEvent nextEvent = olvasó.nextEvent (); if (nextEvent.isStartElement ()) {StartElement startElement = nextEvent.asStartElement (); kapcsoló (startElement.getName (). getLocalPart ()) {case "website": website = new WebSite (); Attribútum URL = startElement.getAttributeByName (új QName ("url")); if (url! = null) {website.setUrl (url.getValue ()); } szünet; case "név": nextEvent = olvasó.nextEvent (); website.setName (nextEvent.asCharacters (). getData ()); szünet; case "kategória": nextEvent = olvasó.nextEvent (); website.setCategory (nextEvent.asCharacters (). getData ()); szünet; case "status": nextEvent = olvasó.nextEvent (); website.setStatus (nextEvent.asCharacters (). getData ()); szünet; }} if (nextEvent.isEndElement ()) {EndElement endElement = nextEvent.asEndElement (); if (endElement.getName (). getLocalPart (). egyenlő ("weboldal")) {websites.add (weboldal); }}}

Az egyes webhelyek összes tulajdonságának megszerzéséhez ellenőrizzük startElement.getName (). getLocalPart () minden eseményre. Ezután ennek megfelelően állítjuk be a megfelelő tulajdonságot.

Amikor elérjük a webhely végelemeit, tudjuk, hogy entitásunk teljes, ezért hozzáadjuk az entitást az elemünkhöz weboldalak lista.

6. Következtetés

Ebben az oktatóanyagban megtanultuk hogyan elemezzen egy XML fájlt a StAX könyvtár segítségével.

A példa XML fájl és a teljes értelmező kód, mint mindig, elérhető a Githubon.