Cara Membaca dan Menulis File XML Dengan Kode

Cara Membaca dan Menulis File XML Dengan Kode

Apakah Anda ingin mempelajari cara membaca dan menulis file XML dari java?





file XML digunakan untuk berbagai tujuan termasuk penyimpanan data. Sebelum JSON menjadi populer, XML adalah format yang lebih disukai untuk mewakili, menyimpan, dan mengangkut data terstruktur. Meskipun popularitas XML telah berkurang dalam beberapa tahun terakhir, Anda mungkin menemukannya sesekali sehingga penting untuk mempelajari cara bekerja dengannya dari kode.





Java Standard Edition (SE) mencakup Java API untuk Pemrosesan XML (JAXP) , yang merupakan istilah umum yang mencakup sebagian besar aspek pemrosesan XML. Ini termasuk:





  • PERTIMBANGAN: Model Objek Dokumen mencakup kelas untuk bekerja dengan artefak XML seperti elemen, simpul, atribut, dll. DOM API memuat dokumen XML lengkap ke dalam memori untuk diproses, sehingga tidak terlalu cocok untuk bekerja dengan file XML besar.
  • SAKSOFON: Simple API for XML adalah algoritme berbasis peristiwa untuk membaca XML. Di sini XML diproses dengan menembakkan peristiwa yang ditemukan saat membaca XML. Persyaratan memori untuk menggunakan metode ini rendah, tetapi bekerja dengan API lebih kompleks daripada bekerja dengan DOM.
  • STAX: Streaming API untuk XML adalah tambahan terbaru untuk XML API dan menyediakan pemfilteran, pemrosesan, dan modifikasi XML performa tinggi. Meskipun menghindari memuat seluruh dokumen XML ke dalam memori, ini menyediakan arsitektur tipe tarik daripada arsitektur yang digerakkan oleh peristiwa, sehingga aplikasi lebih mudah untuk dikodekan dan dipahami daripada menggunakan SAX API.

Dalam artikel ini, kami menggunakan DOM API untuk mendemonstrasikan cara membaca dan menulis file XML dari Java. Kami akan membahas dua API lainnya di artikel mendatang.

Contoh File XML

Untuk tujuan artikel ini, kami mendemonstrasikan konsep menggunakan contoh XML berikut, yang dapat ditemukan: di sini :






Gambardella, Matthew
XML Developer's Guide
Computer
44.95
2000-10-01
An in-depth look at creating applications
with XML.


Ralls, Kim
...

Membaca File XML

Mari kita lihat langkah-langkah dasar yang diperlukan untuk membaca file XML menggunakan DOM API.

Langkah pertama adalah mendapatkan instance dari Pembuat Dokumen . Builder digunakan untuk mengurai dokumen XML. Untuk penggunaan dasar, kami melakukannya seperti ini:





layar hitam pada boot windows 10
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();

Kita sekarang dapat memuat seluruh dokumen ke dalam memori mulai dari elemen root XML. Dalam contoh kita, itu adalah katalog elemen.

File file = ...; // XML file to read
Document document = builder.parse(file);
Element catalog = document.getDocumentElement();

Dan hanya itu, teman-teman! DOM API untuk membaca XML sangat sederhana. Anda sekarang memiliki akses ke seluruh dokumen XML mulai dari elemen akarnya, katalog . Sekarang mari kita lihat bagaimana bekerja dengannya.





Menggunakan API DOM

Sekarang kita memiliki root XML Elemen , kita dapat menggunakan DOM API untuk mengekstrak nugget informasi yang menarik.

Dapatkan semua buku anak-anak dari elemen root dan loop di atasnya. Perhatikan bahwa getChildNode() kembali semua anak-anak, termasuk teks, komentar, dll. Untuk tujuan kami, kami hanya membutuhkan elemen anak, jadi kami melewatkan yang lain.

NodeList books = catalog.getChildNodes();
for (int i = 0, ii = 0, n = books.getLength() ; i Node child = books.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
Element book = (Element)child;
// work with the book Element here
}

Bagaimana Anda menemukan elemen anak tertentu, mengingat orang tuanya? Metode statis berikut mengembalikan elemen pertama yang cocok jika ditemukan, atau nol. Seperti yang Anda lihat, prosedurnya melibatkan mendapatkan daftar node anak dan mengulanginya dengan memilih node elemen dengan nama yang ditentukan.

static private Node findFirstNamedElement(Node parent,String tagName)
{
NodeList children = parent.getChildNodes();
for (int i = 0, in = children.getLength() ; i Node child = children.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
if ( child.getNodeName().equals(tagName) )
return child;
}
return null;
}

Perhatikan bahwa DOM API memperlakukan konten teks di dalam elemen sebagai simpul tipe yang terpisah TEXT_NODE . Selain itu, konten teks mungkin dipecah menjadi beberapa node teks yang berdekatan. Jadi pemrosesan khusus berikut diperlukan untuk mengambil konten teks di dalam suatu elemen.

static private String getCharacterData(Node parent)
{
StringBuilder text = new StringBuilder();
if ( parent == null )
return text.toString();
NodeList children = parent.getChildNodes();
for (int k = 0, kn = children.getLength() ; k Node child = children.item(k);
if ( child.getNodeType() != Node.TEXT_NODE )
break;
text.append(child.getNodeValue());
}
return text.toString();
}

Berbekal fungsi kemudahan ini, sekarang mari kita lihat beberapa kode untuk membuat daftar beberapa informasi dari contoh XML kita. Kami ingin menampilkan informasi rinci untuk setiap buku, seperti yang akan tersedia di katalog buku.

NodeList books = catalog.getChildNodes();
for (int i = 0, ii = 0, n = books.getLength() ; i Node child = books.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
Element book = (Element)child;
ii++;
String id = book.getAttribute('id');
String author = getCharacterData(findFirstNamedElement(child,'author'));
String title = getCharacterData(findFirstNamedElement(child,'title'));
String genre = getCharacterData(findFirstNamedElement(child,'genre'));
String price = getCharacterData(findFirstNamedElement(child,'price'));
String pubdate = getCharacterData(findFirstNamedElement(child,'pubdate'));
String descr = getCharacterData(findFirstNamedElement(child,'description'));
System.out.printf('%3d. book id = %s
' +
' author: %s
' +
' title: %s
' +
' genre: %s
' +
' price: %s
' +
' pubdate: %s
' +
' descr: %s
',
ii, id, author, title, genre, price, pubdate, descr);
}

Menulis Keluaran XML

Java menyediakan API Transformasi XML untuk mengubah data XML. Kami menggunakan API ini dengan transformasi identitas untuk menghasilkan keluaran.

Sebagai contoh, mari kita tambahkan yang baru buku elemen ke katalog sampel yang disajikan di atas. Detail buku (seperti Pengarang , judul , dll) dapat diperoleh secara eksternal, mungkin dari file properti atau database. Kami menggunakan file properti berikut untuk memuat data.

id=bk113
author=Jane Austen
title=Pride and Prejudice
genre=Romance
price=6.99
publish_date=2010-04-01
description='It is a truth universally acknowledged, that a single man in possession of a good fortune must be in want of a wife.' So begins Pride and Prejudice, Jane Austen's witty comedy of manners-one of the most popular novels of all time-that features splendidly civilized sparring between the proud Mr. Darcy and the prejudiced Elizabeth Bennet as they play out their spirited courtship in a series of eighteenth-century drawing-room intrigues.

Langkah pertama adalah mengurai file XML yang ada menggunakan metode yang disajikan di atas. Kode juga ditunjukkan di bawah ini.

File file = ...; // XML file to read
Document document = builder.parse(file);
Element catalog = document.getDocumentElement();

Kami memuat data dari file properti menggunakan Properti kelas yang disediakan dengan java. Kodenya cukup sederhana dan ditunjukkan di bawah ini.

String propsFile = ...;
Properties props = new Properties();
try (FileReader in = new FileReader(propsFile)) {
props.load(in);
}

Setelah properti dimuat, kami mengambil nilai yang ingin kami tambahkan dari file properti.

String id = props.getProperty('id');
String author = props.getProperty('author');
String title = props.getProperty('title');
String genre = props.getProperty('genre');
String price = props.getProperty('price');
String publish_date = props.getProperty('publish_date');
String descr = props.getProperty('description');

Sekarang mari kita buat yang kosong buku elemen.

atur alamat email baru
Element book = document.createElement('book');
book.setAttribute('id', id);

Menambahkan elemen anak ke buku adalah sepele. Untuk kenyamanan, kami mengumpulkan nama elemen yang diperlukan dalam a Daftar dan tambahkan nilai dalam satu lingkaran.

List elnames =Arrays.asList('author', 'title', 'genre', 'price',
'publish_date', 'description');
for (String elname : elnames) {
Element el = document.createElement(elname);
Text text = document.createTextNode(props.getProperty(elname));
el.appendChild(text);
book.appendChild(el);
}
catalog.appendChild(book);

Dan itu adalah bagaimana hal itu dilakukan. NS katalog elemen sekarang memiliki yang baru buku elemen ditambahkan. Yang tersisa sekarang adalah menulis XML yang diperbarui.

Untuk menulis XML, kita membutuhkan sebuah instance dari Transformator yang dibuat seperti gambar di bawah ini. Perhatikan bahwa kami meminta lekukan keluaran XML menggunakan setOutputProperty() metode.

TransformerFactory tfact = TransformerFactory.newInstance();
Transformer tform = tfact.newTransformer();
tform.setOutputProperty(OutputKeys.INDENT, 'yes');
tform.setOutputProperty('{http://xml.apache.org/xslt}indent-amount', '3');

Langkah terakhir dalam menghasilkan output XML adalah menerapkan transformasi. Hasilnya muncul pada aliran output, System.out .

tform.transform(new DOMSource(document), new StreamResult(System.out));

Untuk menulis output langsung ke file, gunakan yang berikut ini.

tform.transform(new DOMSource(document), new StreamResult(new File('output.xml')));

Dan itu mengakhiri artikel ini tentang membaca dan menulis file XML menggunakan DOM API.

Sudahkah Anda menggunakan DOM API di aplikasi Anda? Bagaimana performanya? Beri tahu kami di komentar di bawah.

Membagikan Membagikan Menciak Surel Canon vs. Nikon: Merek Kamera Mana yang Lebih Baik?

Canon dan Nikon adalah dua nama besar di industri kamera. Tetapi merek mana yang menawarkan jajaran kamera dan lensa yang lebih baik?

Baca Selanjutnya
Topik-topik yang berkaitan
  • Pemrograman
  • Jawa
Tentang Penulis Jay Sridhar(17 Artikel Diterbitkan) More From Jay Sridhar

Berlangganan newsletter kami

Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!

Klik di sini untuk berlangganan