1. Dom (Jaxp Crimson Parser)
DOM adalah standar W3C resmi untuk mewakili dokumen XML dengan cara yang tidak tergantung pada platform dan bahasa. DOM adalah kumpulan node atau fragmen informasi yang disusun dalam hierarki. Hirarki ini memungkinkan pengembang untuk mencari informasi spesifik di pohon. Menganalisis struktur ini biasanya membutuhkan pemuatan seluruh dokumen dan membangun hierarki sebelum pekerjaan apa pun dapat dilakukan. Karena didasarkan pada tingkat informasi, DOM dianggap berbasis pohon atau berbasis objek. DOM dan pemrosesan berbasis pohon umum memiliki beberapa keuntungan. Pertama, karena pohon persisten dalam memori, dapat dimodifikasi sehingga aplikasi dapat membuat perubahan pada data dan struktur. Ini juga memungkinkan Anda untuk menavigasi pohon naik dan turun kapan saja, daripada menjadi pekerjaan satu kali seperti saksofon. Dom jauh lebih sederhana untuk digunakan.
2. Sax
Keuntungan pemrosesan saksofon sangat mirip dengan keunggulan streaming. Analisis dapat segera dimulai, daripada menunggu semua data diproses. Dan, karena aplikasi hanya memeriksa data saat membacanya, tidak perlu menyimpan data dalam memori. Ini adalah keuntungan besar untuk dokumen besar. Bahkan, aplikasi bahkan tidak harus menguraikan seluruh dokumen; itu dapat berhenti parsing saat kondisi tertentu dipenuhi. Secara umum, saksofon jauh lebih cepat daripada DOM pengganti.
Pilih Dom atau Sax? Bagi pengembang yang perlu menulis kode mereka sendiri untuk memproses dokumen XML, memilih model parsing DOM atau SAX adalah keputusan desain yang sangat penting. DOM menggunakan metode membangun struktur pohon untuk mengakses dokumen XML, sementara SAX menggunakan model acara.
Dom Parser mengubah dokumen XML menjadi pohon yang berisi isinya dan dapat melintasi pohon. Keuntungan mem -parsing model dengan DOM adalah mudah diprogram. Pengembang hanya perlu memanggil instruksi pembuatan pohon dan kemudian menggunakan API navigasi untuk mengakses node pohon yang diperlukan untuk menyelesaikan tugas. Sangat mudah untuk menambah dan memodifikasi elemen di pohon. Namun, karena seluruh dokumen XML perlu diproses saat menggunakan Parser DOM, persyaratan kinerja dan memori relatif tinggi, terutama ketika menemukan file XML besar. Karena kemampuan traversalnya, parser DOM sering digunakan dalam layanan di mana dokumen XML membutuhkan perubahan yang sering.
Sax Parser mengadopsi model berbasis acara. Ini dapat memicu serangkaian peristiwa saat mem -parsing dokumen XML. Ketika tag yang diberikan ditemukan, dapat mengaktifkan metode panggilan balik untuk memberi tahu metode bahwa tag telah ditemukan. Sax biasanya membutuhkan memori rendah karena memungkinkan pengembang untuk memutuskan tag yang ingin mereka proses. Terutama ketika pengembang hanya perlu memproses bagian dari data yang terkandung dalam dokumen, kemampuan ekspansi Sax lebih baik tercermin. Namun, pengkodean sulit ketika menggunakan Sax Parser, dan sulit untuk mengakses beberapa data berbeda dalam dokumen yang sama secara bersamaan.
3. JDom http://www.jdom.org
Tujuan JDOM adalah untuk menjadi model dokumen khusus Java, yang menyederhanakan interaksi dengan XML dan lebih cepat daripada menggunakan DOM. Karena ini adalah model khusus Java pertama, JDOM telah dipromosikan dan dipromosikan dengan kuat. Mempertimbangkan akhirnya menggunakannya sebagai "ekstensi standar java" melalui "permintaan spesifikasi Java JSR-102". Pengembangan JDOM telah dimulai sejak awal tahun 2000.
JDOM dan DOM terutama berbeda dalam dua aspek. Pertama, JDom hanya menggunakan kelas konkret dan bukan antarmuka. Ini menyederhanakan API dalam beberapa hal, tetapi juga membatasi fleksibilitas. Kedua, API menggunakan sejumlah besar kelas koleksi, menyederhanakan penggunaan pengembang Java yang sudah terbiasa dengan kelas -kelas ini.
Dokumentasi JDOM menyatakan bahwa tujuannya adalah untuk "menggunakan 20% (atau kurang) upaya untuk menyelesaikan 80% (atau lebih) masalah Java/XML" (diasumsikan sebagai 20% berdasarkan kurva pembelajaran). JDom tentu saja berguna untuk sebagian besar aplikasi Java/XML, dan sebagian besar pengembang menemukan API jauh lebih mudah untuk dipahami daripada DOM. JDom juga mencakup pemeriksaan yang cukup luas pada perilaku program untuk mencegah pengguna melakukan sesuatu yang tidak berarti di XML. Namun, itu masih mengharuskan Anda untuk sepenuhnya memahami XML untuk melakukan sesuatu di luar dasar -dasar (atau bahkan memahami kesalahan dalam beberapa kasus). Ini mungkin pekerjaan yang lebih bermakna daripada mempelajari antarmuka dom atau jdom.
JDom sendiri tidak mengandung parser. Biasanya menggunakan parser SAX2 untuk menguraikan dan memvalidasi dokumen input XML (meskipun juga dapat mengambil representasi DOM yang dibangun sebelumnya sebagai input). Ini berisi beberapa konverter untuk mengeluarkan representasi JDOM ke dalam aliran acara SAX2, model DOM, atau dokumen teks XML. JDom adalah open source yang dirilis di bawah varian lisensi Apache.
4. Dom4j http://dom4j.sourceForge.net
Meskipun DOM4J merupakan hasil pembangunan yang sepenuhnya independen, pada awalnya itu adalah cabang JDOM yang cerdas. Ini menggabungkan banyak fitur di luar representasi dokumen XML dasar, termasuk dukungan XPath terintegrasi, dukungan skema XML, dan pemrosesan berbasis acara untuk dokumen besar atau streaming. Ini juga menyediakan opsi untuk membangun representasi dokumen, yang memiliki akses paralel melalui API DOM4J dan antarmuka DOM standar. Sudah di bawah pengembangan sejak paruh kedua tahun 2000.
Untuk mendukung semua fitur ini, DOM4J menggunakan antarmuka dan metode kelas dasar abstrak. DOM4J menggunakan kelas koleksi di API secara luas, tetapi dalam banyak kasus ini juga menyediakan beberapa alternatif untuk memungkinkan kinerja yang lebih baik atau metode pengkodean yang lebih mudah. Manfaat langsungnya adalah bahwa sementara DOM4J membayar harga API yang lebih kompleks, ia memberikan fleksibilitas yang jauh lebih besar daripada JDOM.
Saat menambahkan fleksibilitas, integrasi XPath dan tujuan pemrosesan dokumen besar, DOM4J sama dengan JDOM: kemudahan penggunaan dan operasi intuitif untuk pengembang Java. Ini juga berkomitmen untuk menjadi solusi yang lebih lengkap daripada JDOM, mencapai tujuan berurusan dengan semua masalah Java/XML di alam. Saat menyelesaikan tujuan ini, itu menekankan lebih sedikit penekanan pada mencegah perilaku aplikasi yang salah daripada JDOM.
DOM4J adalah Java XML API yang sangat, sangat baik, dengan kinerja yang sangat baik, fungsi yang kuat dan sangat mudah digunakan. Ini juga merupakan perangkat lunak open source. Saat ini, Anda dapat melihat bahwa semakin banyak perangkat lunak Java menggunakan DOM4J untuk membaca dan menulis XML. Perlu disebutkan bahwa bahkan JAXM Sun menggunakan DOM4J.
Perbandingan empat metode
DOM4J memiliki kinerja terbaik, dan bahkan JAXM Sun menggunakan DOM4J. Saat ini, banyak proyek open source menggunakan DOM4J dalam jumlah besar, seperti Hibernate yang terkenal juga menggunakan DOM4J untuk membaca file konfigurasi XML. Jika portabilitas tidak dipertimbangkan, maka DOM4J digunakan.
JDOM dan DOM berkinerja buruk selama pengujian kinerja, memori meluap saat menguji dokumen 10m. Perlu juga dipertimbangkan Dom dan JDom dalam hal dokumentasi kecil. Sementara pengembang JDOM telah menyatakan bahwa mereka berharap untuk fokus pada masalah kinerja sebelum rilis resmi, dari sudut pandang kinerja, itu benar -benar tidak benar -benar merekomendasikan. Selain itu, DOM masih merupakan pilihan yang sangat baik. Implementasi DOM banyak digunakan dalam berbagai bahasa pemrograman. Ini juga merupakan dasar dari banyak standar terkait XML lainnya, karena secara resmi rekomendasi W3C (berbeda dengan model Java berbasis standar), sehingga mungkin diperlukan dalam beberapa jenis proyek juga (seperti menggunakan DOM dalam JavaScript).
Sax berkinerja lebih baik, yang tergantung pada metode parsing spesifiknya - didorong oleh peristiwa. Sax mendeteksi aliran XML yang akan datang, tetapi tidak dimuat ke dalam memori (tentu saja, ketika aliran XML dibaca, beberapa dokumen akan disembunyikan sementara dalam memori).
Penggunaan Dasar Empat Metode Operasi XML
File XML:
<? Versi xml = "1.0" encoding = "gb2312"?> < hasil> < nilai> < no> a1234 </no> < addr> No. xx bagian xx, xx town, xx county, provinsi Sichuan </addr> </nilai < nilai < < < < < < < no </Addr> </value> </hasil >
1) Metode Implementasi DOM
Impor java.io.*; impor java.util.*; impor org.w3c.dom.*; impor javax.xml.parsers.*; kelas publik myxmlreader {public static void main (string arge []) {long law. system.currentTimeMillis (); coba {file f = file baru ("data_10k.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory.NewInstance (); DocumentBuilder builder = factory.newDocumentBuilder (); Dokumen doc = builder.parse (f); Nodelist nl = doc.geteLementsbyTagname ("value"); untuk (int i = 0; i < nl.getLength (); i ++) {System.out.print ("Nomor plat nomor:"+doc.getElementsbyTagname ("no"). Item (i) .getFirstChild (). getNodevalue ()); System.out.println ("Alamat pemilik:" + doc.getElementsbyTagname ("addr"). Item (i) .getFirstChild (). GetNodevalue ()); }} catch (Exception e) {e.printstacktrace ();} 2) Metode implementasi SAX
impor org.xml.sax.*; impor org.xml.sax.helpers.*; impor javax.xml.parsers.*; kelas publik myxmlreader memperluas defaulthandler {java.util.stack tags = new java.util.stack (); public myxmlreader () {super ();} public static void main (string args []) {long lowting = system.currentTimeMillis (); coba {saxparserfactory sf = saxparserfactory.newinstance (); Saxparser sp = sf.newsaxparser (); Myxmlreader reader = myxmlreader baru (); sp.parse (inputSource baru ("data_10k.xml"), pembaca); } catch (Exception e) {E.PrintStackTrace (); } System.out.println ("Jalankan Waktu:" + (System.CurrentTimeMillis () - langgeng) + "milidonds");} Karakter public void (char ch [], int start, int length) melempar saxexception {string tag = (string) tags.peekeek (); if (tag.equals ("no")) {System.out.print ("Nomor plat nomor:" + string baru (ch, start, length));} if (tag.equals ("addr")) {System.out.println ("Alamat:" + String baru (CH, MULAI, PANJANG));}} Startelement {string {string {string, string, string, string, string, string, string, string new, string, string, tags.push (qname);}} 3) Metode Implementasi JDom
Impor java.io.*; impor java.util.*; impor org.jdom.*; impor org.jdom.input.*; kelas publik myxmlreader {public static void main (string arge []) {long abadi = system.currentTimeMillis (); coba {saxbuilder builder = baru saxbuilder (); Dokumen doc = builder.build (file baru ("data_10k.xml")); Elemen foo = doc.getrooteLement (); Daftar allchildren = foo.getchildren (); untuk (int i = 0; i < allchildren.size (); i ++) {System.out.print ("Nomor plat nomor:"+((elemen) allchildren.get (i)). getChild ("no"). getText ()); System.out.println ("Alamat pemilik:" + ((elemen) allchildren.get (i)). GetChild ("addr"). GetText ()); }} catch (exception e) {e.printstacktrace ();}} 4) Metode Implementasi DOM4J
Impor java.io.*; impor java.util.*; impor org.dom4j.*; impor org.dom4j.io.*; kelas publik myxmlreader {public static void main (string arge []) {long law = system.currentTimeMillis (); coba {file f = file baru ("data_10k.xml"); Saxreader Reader = SaxReader baru (); Dokumen doc = reader.read (f); Elemen root = doc.getrooteLement (); Elemen foo; untuk (iterator i = root.elementIterator ("value"); i.hasnext () {foo = (elemen) i.next (); System.out.print ("Nomor plat:" + foo.elementText ("no"); System.out.println ("alamat pemilik:" + foo.elementtext ("addr") {evel {"oudr") E.PrintStackTrace ();})