Seperti yang kita semua tahu, ada semakin banyak metode untuk mengurai XML sekarang, tetapi hanya ada empat metode utama, yaitu: Dom, Sax, JDom dan Dom4j
Berikut ini adalah yang pertama memberikan alamat unduhan paket jar untuk keempat metode ini
DOM: Muncul dalam Java JDK saat ini, dalam paket xml-apis.jar
Saksofon: http://sourceForge.net/projects/sax/
Jdom: http://jdom.org/downloads/index.html
Dom4j: http://sourceForge.net/projects/dom4j/
1. PENDAHULUAN DAN ANALISIS KEUNGGUAN DAN KERUSAKAN
1. DOM (Model Objek Dokumen)
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.
【keuntungan】
① Izinkan aplikasi untuk membuat perubahan pada data dan struktur.
② Akses adalah dua arah, dan Anda dapat menavigasi naik dan turun pohon kapan saja, memperoleh dan mengoperasikan bagian mana pun dari data.
【kekurangan】
① Biasanya, seluruh dokumen XML perlu dimuat untuk membangun hierarki, yang mengkonsumsi banyak sumber daya.
2. SAX (API Sederhana untuk XML)
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.
【Keuntungan】
① Tidak perlu menunggu semua data diproses dan analisis dapat segera dimulai.
② Periksa data hanya saat membaca data, dan tidak perlu disimpan dalam memori.
③ Anda dapat berhenti parsing ketika kondisi tertentu dipenuhi, tanpa harus menguraikan seluruh dokumen.
④ Efisiensi dan kinerja yang tinggi, dan dapat menguraikan dokumen yang lebih besar dari memori sistem.
【kekurangan】
① Aplikasi perlu bertanggung jawab atas logika pemrosesan tag (seperti mempertahankan hubungan orang tua/anak, dll.), Semakin kompleks dokumen, semakin rumit programnya.
② Navigasi satu arah tidak dapat menemukan hierarki dokumen, dan sulit untuk mengakses berbagai bagian data dari dokumen yang sama pada saat yang sama, dan tidak mendukung XPath.
3. JDom (model objek dokumen berbasis Java)
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.
【keuntungan】
①Gunakan kelas konkret alih -alih antarmuka, menyederhanakan DOM API.
② Sejumlah besar kelas koleksi Java digunakan untuk memfasilitasi pengembang Java.
【kekurangan】
①no fleksibilitas yang baik.
② Kinerja yang buruk.
4. DOM4J (Model Objek Dokumen untuk Java)
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.
【keuntungan】
Class Kelas koleksi Java banyak digunakan untuk memfasilitasi pengembang Java dan memberikan beberapa metode alternatif untuk meningkatkan kinerja.
②Sport xpath.
③ itu memiliki kinerja yang baik.
【kekurangan】
① Antarmuka digunakan secara luas, dan API relatif kompleks.
2. Perbandingan
1. 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.
2. JDom dan DOM berkinerja buruk selama pengujian kinerja, memori meluap ketika menguji dokumen 10m, tetapi portabel. 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).
3. Sax berkinerja lebih baik, yang tergantung pada metode analisis 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).
Pendapat saya: Jika dokumen XML besar dan tidak mempertimbangkan masalah portabilitas, disarankan untuk menggunakan DOM4J; Jika dokumen XML kecil, disarankan untuk menggunakan JDom; Jika perlu diproses tepat waktu tanpa menyimpan data, disarankan untuk mempertimbangkan saksofon. Tapi apa pun yang terjadi, kalimat yang sama adalah: yang terbaik adalah hal yang benar. Jika waktu memungkinkan, Anda disarankan untuk mencoba keempat metode ini dan memilih satu yang cocok untuk Anda.
AKU AKU AKU. Contoh
Untuk menghemat ruang, keempat metode dan perbedaan dalam membuat dokumen XML ini tidak diberikan di sini untuk saat ini. Hanya kode untuk parsing dokumen XML yang diberikan. Jika diperlukan proyek lengkap (membangun dokumen XML + parsing xml + perbandingan pengujian).
Berikut adalah konten XML berikut sebagai contoh untuk parsing:
<? Xml Version = "1.0" encoding = "UTF-8"?> <serander> <user id = "0"> <name> Alexia </name> <mua> 23 </efage> <nage> wanita </sex> </user> <User id = "1"> <name> edward </name> </name> </sex> use </user> </sex sex> name> edward </name> <puen> </sex> use </sex> sex sex> MALE </edward </name> <puen> <puen> 24 </use> </sex sex> lek <name> wjm </name> <mage> 23 </mage> <caps> wanita </perana> </serander> <user id = "3"> <name> wh </name> <mage> 24 </age> <ceks> pria </sect> </serander> </serser>
Pertama -tama tentukan antarmuka untuk parsing dokumen XML:
/*** @Author Alexia** Tentukan antarmuka untuk parsing dokumen XML*/antarmuka publik xmldocument {/*** Parse XML Dokumen** @param fileName* File nama jalur lengkap*/public void parserxml (string fileName);} 1. Contoh Dom
Paket com.xml; import java.io.filenotfoundException; impor java.io.fileoutputStream; import java.io.ioException; impor java.io.printwriter; import javax.xml.parsers.documentbuilder; impor javax.xml.parsers.parsers.documentbuilder; impor javax.xml.parsers.parsers.parsers.documentbuilder; javax.xml.parsers.parserconfigurationException; impor javax.xml.transform.outputkeys; impor javax.xml.transform.transformer; impor javax.xml.transform.transformconfigurationexception; impor javax.xml.transform.transformconfurationexception; impor javax.xml.transform.ransform.transcepcepte; javax.xml.transform.transformerfactory; impor javax.xml.transform.dom.domsource; impor javax.xml.transform.stream.streamResult; impor org.w3c.dom.document; impor org.w3c.elom.element; impor.w3c.dom. org.xml.sax.saxException;/** * @author Alexia * * Dom parsing dokumen xml */kelas publik DomDemo mengimplementasikan xmldocument {dokumen dokumen pribadi; public void parserxml (string fileName) {coba {DocumentBuilderFactory dbf = DocumentBuilderFactory.NewInstance (); DocumentBuilder db = dbf.newDocumentBuilder (); Dokumen dokumen = db.parse (nama file); Nodelist user = document.getchildnodes (); untuk (int i = 0; i <Users.getLength (); i ++) {node user = users.item (i); NodeList userInfo = user.getChildnodes (); untuk (int j = 0; j <userInfo.getLength (); j ++) {node node = userInfo.item (j); Nodelist usermeta = node.getChildnodes (); untuk (int k = 0; k <userMeta.getLength (); k ++) {if (usermeta.item (k) .getNodename ()! = "#text") system.out.println (usermeta.item (k) .getNodename () + ":" + USermeta.item (k) .getnodename () + ":" + USERMETAM (k) .getnodename () + ":" + USERMETEM (K).) } System.out.println (); }}} catch (FileNotFoundException e) {e.printstacktrace (); } catch (parserconfigurationException e) {e.printstacktrace (); } catch (saxException e) {e.printstacktrace (); } catch (saxException e) {e.printstacktrace (); } catch (saxException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }}} 2. Contoh SAX
Paket com.xml; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileoutputStream; import java.io.ioException; impor java.io.inputstream; impor java.io.outputstream; impor java.io.io.io.io. javax.xml.parsers.parserconfigurationException; impor javax.xml.parsers.saxparser; impor javax.xml.parsers.saxparserfactory; impor javax.xml.transform.utputkeys; impor javax.xml.transform.ransform. javax.xml.transform.transformerconfigurationException; impor javax.xml.transform.sax.saxtransformerFactory; import javax.xml.transform.sax.transformerHandler; impor orvax.xml.transform.streamreamREnt; org.xml.sax.saxException; impor org.xml.sax.helpers.attributeSimpl; impor org.xml.sax.helpers.defaulthandler;/** * @Author Alexia * * Sax Parsing XML Dokumen */Kelas Publik Saxdemo Saxdemo) {Saxparserfactory saxfac = saxparserfactory.newinstance (); coba {saxparser saxparser = saxfac.newsaxparser (); InputStream adalah = FileInputStream baru (nama file); saxparser.parse (IS, mysaxhandler baru ()); } catch (parserconfigurationException e) {e.printstacktrace (); } catch (saxException e) {e.printstacktrace (); } catch (FileNotFoundException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }}} kelas mysaxhandler memperluas defaulthandler {boolean hasattribute = false; Atribut Atribut = NULL; public void startDocument () melempar SaxException {// System.out.println ("Dokumen telah mulai mencetak"); } enddocument public void () melempar SaxException {// System.out.println ("Dokumen telah mengakhiri pencetakan"); } startElement public void (String URI, String LocalName, String QName, Atribut Atribut) Melempar SaxException {if (qname.equals ("Users")) {return; } if (qname.equals ("user")) {return; } if (attributes.getLength ()> 0) {this.attributes = atribut; this.hasattribute = true; }} endElement public void (String URI, String LocalName, String QName) melempar SAXException {if (HasAttribute && (atribut! = null)) {for (int i = 0; i <atributs.getLength (); i ++) {System.out.print (attribute.getQ.get (); i ++) {System.out.print (attribute.getQ.getQ (0); i ++) {System.out.print (attribute.getQ (attribute) {System.out.print (attribute.getQ (attribute.) }}} karakter public void (char [] ch, int start, int length) melempar saxexception {system.out.print (string baru (ch, start, length)); }} 3. JDOM Contoh
package com.xml;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.List;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;import org.jdom2.output.xmloutputter;/** * @Author Alexia * * jdom parsing dokumen xml * */kelas publik JDomDemo mengimplementasikan xmldocument {public void parserxml (string fileName) {saxbuilder builder = saxbuilder baru (); coba {dokumen dokumen = builder.build (nama file); Elemen pengguna = document.getrooteLement (); Daftar userList = Users.getChildren ("user"); untuk (int i = 0; i <userlist.size (); i ++) {element user = (element) userlist.get (i); Daftar userInfo = user.getchildren (); untuk (int j = 0; j <userInfo.size (); j ++) {System.out.println (((elemen) userInfo.get (j)). getName () + ":" + (element) userInfo.get (j)). getValue ()); } System.out.println (); }} catch (jdomexception e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }}} 4. Contoh DOM4J
Paket com.xml; impor java.io.file; impor java.io.filewriter; impor java.io.ioexception; impor java.io.writer; impor java.util.iterator; impor org.dom.document; impor org.dom4j.documentception; impor org.dom. org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;/** * @author Alexia * * Dom4j parse XML document*/public class Dom4jDemo implements XmlDocument { public void parserXml(String fileName) { File inputXml = new File(fileName); Saxreader Saxreader = Saxreader baru (); coba {dokumen dokumen = saxreader.read (inputxml); Elemen pengguna = document.getrooteLement (); untuk (iterator i = user.elementIterator (); i.hasnext ();) {element user = (elemen) i.next (); untuk (iterator j = user.elementIterator (); j.hasnext ();) {elemen node = (elemen) j.next (); System.out.println (node.getName () + ":" + node.getText ()); } System.out.println (); }} catch (DocumentException e) {System.out.println (e.getMessage ()); }}}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.