Menghuraikan Fail XML Menggunakan StAX

1. Pengenalan

Dalam tutorial ini, kami akan menerangkan cara menguraikan fail XML menggunakan StAX. Kami akan melaksanakan penghurai XML ringkas dan melihat bagaimana ia berfungsi dengan contoh.

2. Menghuraikan dengan StAX

StAX adalah salah satu daripada beberapa perpustakaan XML di Java. Ia adalah perpustakaan cekap memori yang termasuk dalam JDK sejak Java 6. StAX tidak memuat keseluruhan XML ke dalam memori. Sebaliknya, ia menarik data dari aliran dengan cara ke hadapan sahaja. Aliran dibaca oleh objek XMLEventReader .

3. Kelas XMLEventReader

Di StAX, sebarang tanda permulaan atau tanda akhir adalah acara. XMLEventReader membaca fail XML sebagai aliran peristiwa. Ini juga menyediakan kaedah yang diperlukan untuk menguraikan XML. Kaedah yang paling penting adalah:

  • isStartElement () : memeriksa apakah peristiwa semasa adalah StartElement (tag mula)
  • isEndElement () : memeriksa apakah peristiwa semasa adalah EndElement (tag akhir)
  • asCharacters () : mengembalikan peristiwa semasa sebagai watak
  • getName () : mendapat nama peristiwa semasa
  • getAttributes () : mengembalikan Iterator atribut peristiwa semasa

4. Melaksanakan Penyusun XML Mudah

Tidak perlu dikatakan, langkah pertama untuk menguraikan XML adalah membacanya. Kami memerlukan XMLInputFactory untuk membuat XMLEventReader untuk membaca fail kami:

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

Sekarang bahawa XMLEventReader siap, kami bergerak ke hadapan melalui sungai dengan nextEvent () :

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

Seterusnya, kita perlu mencari tag permulaan yang kita inginkan terlebih dahulu:

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

Oleh itu, kita dapat membaca atribut dan data:

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

Kami juga dapat memeriksa sama ada kami telah mencapai tag akhir:

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

5. Menghuraikan Contoh

Untuk mendapatkan pemahaman yang lebih baik, mari jalankan penghurai kami pada contoh fail XML:

   Baeldung Online Courses Online   Example Examples Offline   Localhost Tests Offline  

Mari kita menguraikan XML dan menyimpan semua data ke dalam senarai objek entiti yang disebut laman 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 sifat setiap laman web, kami menyemak startElement.getName (). GetLocalPart () untuk setiap acara. Kami kemudian menetapkan harta yang sesuai.

Apabila kita mencapai elemen akhir laman web, kita tahu bahawa entiti kita sudah lengkap, jadi kita menambahkan entiti tersebut ke dalam senarai laman web kami .

6. Kesimpulannya

Dalam tutorial ini, kami belajar bagaimana menguraikan fail XML menggunakan perpustakaan StAX .

Contoh fail XML dan kod penghurai penuh tersedia, seperti biasa, di Github.