Mengurai File XML Menggunakan StAX

1. Perkenalan

Dalam tutorial ini, kami akan mengilustrasikan cara mengurai file XML menggunakan StAX. Kami akan menerapkan parser XML sederhana dan melihat cara kerjanya dengan sebuah contoh.

2. Parsing dengan StAX

StAX adalah salah satu dari beberapa perpustakaan XML di Java. Ini adalah pustaka hemat memori yang disertakan dalam JDK sejak Java 6. StAX tidak memuat seluruh XML ke dalam memori. Sebaliknya, ia menarik data dari aliran dengan cara hanya meneruskan. Aliran dibaca oleh objek XMLEventReader .

3. Kelas XMLEventReader

Di StAX, setiap tag awal atau tag akhir adalah sebuah acara. XMLEventReader membaca file XML sebagai aliran peristiwa. Ini juga menyediakan metode yang diperlukan untuk mengurai XML. Metode terpenting adalah:

  • isStartElement () : memeriksa apakah kejadian saat ini adalah StartElement (tag awal)
  • isEndElement () : memeriksa apakah peristiwa saat ini adalah EndElement (tag akhir)
  • asCharacters () : mengembalikan peristiwa saat ini sebagai karakter
  • getName () : mendapatkan nama acara saat ini
  • getAttributes () : mengembalikan Iterator dari atribut kejadian saat ini

4. Menerapkan Parser XML Sederhana

Tak perlu dikatakan, langkah pertama untuk mengurai XML adalah membacanya. Kami membutuhkan XMLInputFactory untuk membuat XMLEventReader untuk membaca file kami:

XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLEventReader reader = xmlInputFactory.createXMLEventReader(new FileInputStream(path));

Sekarang XMLEventReader sudah siap, kita melanjutkan streaming dengan nextEvent () :

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

Selanjutnya, kita perlu menemukan tag awal yang diinginkan terlebih dahulu:

if (nextEvent.isStartElement()) { StartElement startElement = nextEvent.asStartElement(); if (startElement.getName().getLocalPart().equals("desired")) { //... } }

Akibatnya, kita dapat membaca atribut dan data:

String url = startElement.getAttributeByName(new QName("url")).getValue(); String name = nextEvent.asCharacters().getData();

Kami juga dapat memeriksa apakah kami telah mencapai tag akhir:

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

5. Contoh Parsing

Untuk mendapatkan pemahaman yang lebih baik, jalankan parser kami di file XML contoh:

   Baeldung Online Courses Online   Example Examples Offline   Localhost Tests Offline  

Mari parse XML dan simpan semua data ke dalam daftar objek entitas yang disebut situs web :

while (reader.hasNext()) { XMLEvent nextEvent = reader.nextEvent(); if (nextEvent.isStartElement()) { StartElement startElement = nextEvent.asStartElement(); switch (startElement.getName().getLocalPart()) { case "website": website = new WebSite(); Attribute url = startElement.getAttributeByName(new QName("url")); if (url != null) { website.setUrl(url.getValue()); } break; case "name": nextEvent = reader.nextEvent(); website.setName(nextEvent.asCharacters().getData()); break; case "category": nextEvent = reader.nextEvent(); website.setCategory(nextEvent.asCharacters().getData()); break; case "status": nextEvent = reader.nextEvent(); website.setStatus(nextEvent.asCharacters().getData()); break; } } if (nextEvent.isEndElement()) { EndElement endElement = nextEvent.asEndElement(); if (endElement.getName().getLocalPart().equals("website")) { websites.add(website); } } }

Untuk mendapatkan semua properti dari setiap situs web, kami memeriksa startElement.getName (). GetLocalPart () untuk setiap peristiwa. Kami kemudian mengatur properti yang sesuai.

Ketika kami mencapai elemen akhir situs web, kami tahu bahwa entitas kami sudah lengkap, jadi kami menambahkan entitas ke daftar situs web kami .

6. Kesimpulan

Dalam tutorial ini, kami belajar cara mengurai file XML menggunakan perpustakaan StAX .

Contoh file XML dan kode parser lengkap tersedia, seperti biasa, di Github.