Cara Membaca dan Menulis Fail XML Dengan Kod

Cara Membaca dan Menulis Fail XML Dengan Kod

Adakah anda ingin belajar membaca dan menulis fail XML dari java?





Fail XML digunakan untuk pelbagai tujuan termasuk penyimpanan data. Sebelum JSON menjadi popular, XML adalah format pilihan untuk mewakili, menyimpan dan mengangkut data berstruktur. Walaupun populariti XML telah berkurang dalam beberapa tahun kebelakangan ini, anda mungkin kadang-kadang menghadapinya, jadi penting untuk belajar bagaimana bekerja dengannya dari kod.





Java Standard Edition (SE) merangkumi API Java untuk Pemprosesan XML (JAXP) , yang merupakan istilah payung yang merangkumi kebanyakan aspek pemprosesan XML. Ini termasuk:





  • PENGHAKIMAN: Model Objek Dokumen merangkumi kelas untuk bekerja dengan artifak XML seperti elemen, simpul, atribut, dll. API DOM memuatkan dokumen XML yang lengkap ke dalam memori untuk diproses, jadi tidak begitu sesuai untuk bekerja dengan fail XML yang besar.
  • SAX: Simple API untuk XML adalah algoritma berdasarkan peristiwa untuk membaca XML. Di sini XML diproses dengan menembak peristiwa yang dijumpai ketika membaca XML. Keperluan memori untuk menggunakan kaedah ini rendah, tetapi bekerja dengan API lebih kompleks daripada bekerja dengan DOM.
  • StAX: Streaming API untuk XML adalah tambahan terbaru untuk API XML dan menyediakan penapisan, pemprosesan, dan pengubahsuaian XML aliran berprestasi tinggi. Walaupun tidak memuatkan keseluruhan dokumen XML ke dalam memori, ia menyediakan arsitektur jenis tarik daripada seni bina berdasarkan acara, jadi aplikasi lebih mudah dikod dan difahami daripada menggunakan SAX API.

Dalam artikel ini, kami menggunakan API DOM untuk menunjukkan cara membaca dan menulis fail XML dari java. Kami akan merangkumi dua API lain dalam artikel akan datang.

Contoh Fail XML

Untuk tujuan artikel ini, kami menunjukkan konsep menggunakan contoh XML berikut, yang dapat dijumpai 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 Fail XML

Mari kita lihat langkah-langkah asas yang diperlukan untuk membaca fail XML menggunakan DOM API.

Langkah pertama adalah mendapatkan contoh Pembina Dokumen . Pembangun digunakan untuk menguraikan dokumen XML. Untuk penggunaan asas, kami melakukannya seperti ini:





bagaimana memulakan percubaan percuma spotify
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();

Kita sekarang boleh memuatkan keseluruhan dokumen ke dalam memori bermula dari elemen akar XML. Dalam contoh kita, ia adalah katalog unsur.

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

Dan itu sahaja, kawan! API DOM untuk membaca XML sangat mudah. Anda kini mempunyai akses ke keseluruhan dokumen XML bermula dari elemen akarnya, katalog . Mari kita lihat bagaimana untuk bekerja dengannya.





Menggunakan API DOM

Sekarang kita mempunyai akar XML Unsur , kita dapat menggunakan DOM API untuk mengekstrak nugget maklumat yang menarik.

Dapatkan semua buku anak-anak unsur akar dan gelung di atasnya. Perhatikan bahawa getChildNodes () kembali semua kanak-kanak, termasuk teks, komen, dll. Untuk tujuan kami, kami hanya memerlukan elemen kanak-kanak, jadi kami melangkau 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 menemui elemen anak tertentu, yang diberikan oleh ibu bapa? Kaedah statik berikut mengembalikan elemen pencocokan pertama jika dijumpai, atau nol. Seperti yang anda lihat, prosedur melibatkan mendapatkan senarai nod kanak-kanak dan melingkarinya memilih simpul 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 bahawa API DOM memperlakukan kandungan teks dalam elemen sebagai simpul jenis yang terpisah TEXT_NODE . Di samping itu, kandungan teks mungkin dibahagikan kepada beberapa simpul teks bersebelahan. Oleh itu, pemprosesan khas berikut diperlukan untuk mengambil kandungan teks dalam 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();
}

Bersenjata dengan fungsi kemudahan ini, mari sekarang kita melihat beberapa kod untuk menyenaraikan beberapa maklumat dari contoh XML kami. Kami ingin menunjukkan maklumat terperinci untuk setiap buku, seperti yang terdapat dalam 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 Output XML

Java menyediakan API Tranform XML untuk mengubah data XML. Kami menggunakan API ini dengan transformasi identiti untuk menghasilkan output.

Sebagai contoh, mari kita tambahkan yang baru buku elemen ke katalog contoh yang ditunjukkan di atas. Perincian buku (seperti pengarang , tajuk , dll) boleh diperoleh secara luaran, mungkin dari fail sifat atau pangkalan data. Kami menggunakan fail sifat 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 menguraikan fail XML yang ada menggunakan kaedah yang ditunjukkan di atas. Kodnya juga ditunjukkan di bawah.

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

Kami memuat data dari fail sifat menggunakan Hartanah kelas yang disediakan dengan java. Kodnya agak mudah dan ditunjukkan di bawah.

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

Setelah sifat dimuat, kami akan mendapatkan semula nilai yang ingin kami tambahkan dari fail sifat.

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');

Mari kita buat kosong buku unsur.

perkara yang berkaitan dengan pemacu kilat
Element book = document.createElement('book');
book.setAttribute('id', id);

Menambah elemen anak ke buku adalah remeh. Untuk kemudahan, kami mengumpulkan nama elemen yang diperlukan di a Senaraikan dan tambah nilai dalam satu gelung.

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 itulah bagaimana ia dilakukan. The katalog elemen kini mempunyai yang baru buku elemen ditambah. Yang tinggal sekarang ialah menuliskan XML yang dikemas kini.

Untuk menulis XML, kita memerlukan contoh Pengubah yang dibuat seperti gambar di bawah. Perhatikan bahawa kami meminta lekukan output XML menggunakan setOutputProperty () kaedah.

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 tranformasi. Hasilnya muncul pada aliran output, Sistem.keluar .

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

Untuk menulis output terus ke fail, gunakan yang berikut.

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

Dan itu merangkumi artikel ini mengenai membaca dan menulis fail XML menggunakan DOM API.

Adakah anda pernah menggunakan API DOM dalam aplikasi anda? Bagaimana ia dilakukan? Beritahu kami dalam komen di bawah.

Berkongsi Berkongsi Tweet E-mel Canon vs Nikon: Jenama Kamera mana yang lebih baik?

Canon dan Nikon adalah dua nama terbesar dalam industri kamera. Tetapi jenama mana yang menawarkan barisan kamera dan lensa yang lebih baik?

Baca Seterusnya
Topik-topik yang berkaitan
  • Pengaturcaraan
  • Jawa
Mengenai Pengarang Jay Sridhar(17 Artikel Diterbitkan) Lagi Dari Jay Sridhar

Langgan buletin kami

Sertailah buletin kami untuk mendapatkan petua, ulasan, ebook percuma, dan tawaran eksklusif!

Klik di sini untuk melanggan