1. Pengenalan kepada empat cara untuk memanipulasi xml dalam Java
1.DOM (JAXP Crimson parser)
DOM ialah standard W3C rasmi untuk mewakili dokumen XML dalam cara bebas platform dan bahasa. DOM ialah koleksi nod atau cebisan maklumat yang disusun dalam struktur hierarki. Hierarki ini membolehkan pembangun mencari pepohon untuk mendapatkan maklumat khusus. Menganalisis struktur ini biasanya memerlukan memuatkan keseluruhan dokumen dan membina hierarki sebelum sebarang kerja boleh dilakukan. Oleh kerana ia berdasarkan hierarki maklumat, DOM dianggap berasaskan pokok atau berasaskan objek. DOM, dan pemprosesan berasaskan pokok secara umum, mempunyai beberapa kelebihan. Pertama, kerana pokok itu berterusan dalam ingatan, ia boleh diubah suai supaya aplikasi boleh membuat perubahan pada data dan struktur. Ia juga membenarkan navigasi ke atas dan ke bawah pokok pada bila-bila masa, dan bukannya proses sekali seperti SAX. DOM juga lebih mudah digunakan.
2.SAX
Kelebihan pemprosesan SAX hampir sama dengan kelebihan media penstriman. Analisis boleh bermula serta-merta dan bukannya menunggu semua data diproses. Juga, kerana aplikasi hanya menyemak data semasa ia dibaca, tidak perlu menyimpan data dalam ingatan. Ini adalah kelebihan besar untuk dokumen besar. Malah, aplikasi itu tidak perlu menghuraikan keseluruhan dokumen; ia boleh berhenti menghuraikan apabila syarat tertentu dipenuhi. Secara umum, SAX juga jauh lebih pantas daripada penggantiannya, DOM.
DOM atau SAX? Bagi pembangun yang perlu menulis kod mereka sendiri untuk memproses dokumen XML, memilih model penghuraian DOM atau SAX ialah keputusan reka bentuk yang sangat penting. DOM menggunakan struktur pokok untuk mengakses dokumen XML, manakala SAX menggunakan model acara.
Penghurai DOM menukarkan dokumen XML kepada pokok yang mengandungi kandungannya dan boleh melintasi pokok itu. Kelebihan menggunakan DOM untuk menghuraikan model ialah pengaturcaraan adalah mudah Pembangun hanya perlu memanggil arahan pembinaan pokok, dan kemudian menggunakan API navigasi untuk mengakses nod pokok yang diperlukan untuk menyelesaikan tugas. Elemen dalam pokok boleh ditambah dan diubah suai dengan mudah. Walau bagaimanapun, memandangkan keseluruhan dokumen XML perlu diproses apabila menggunakan penghurai DOM, prestasi dan keperluan memori agak tinggi, terutamanya apabila menghadapi fail XML yang besar. Disebabkan keupayaan traversalnya, penghurai DOM sering digunakan dalam perkhidmatan di mana dokumen XML perlu kerap berubah.
Penghurai SAX menggunakan model berasaskan peristiwa Ia boleh mencetuskan satu siri peristiwa apabila menghuraikan dokumen XML Apabila teg yang diberikan ditemui, ia boleh mengaktifkan kaedah panggil balik dan memberitahu kaedah untuk merumuskan telah ditemui. SAX biasanya mempunyai keperluan memori yang lebih rendah kerana ia membolehkan pembangun memutuskan teg yang hendak diproses Terutama apabila pembangun hanya perlu memproses sebahagian daripada data yang terkandung dalam dokumen, skalabiliti SAX lebih baik. Tetapi pengekodan lebih sukar apabila menggunakan penghurai SAX, dan sukar untuk mengakses berbilang data berbeza dalam dokumen yang sama pada masa yang sama.
3.JDOM
JDOM direka bentuk untuk menjadi model dokumen khusus Java yang memudahkan interaksi dengan XML dan lebih pantas daripada menggunakan pelaksanaan DOM. Oleh kerana ia adalah model khusus Java yang pertama, JDOM telah banyak dipromosikan dan dipromosikan. Ia sedang dipertimbangkan untuk kegunaan akhirnya sebagai "Sambungan Standard Java" melalui "Permintaan Spesifikasi Java JSR-102". Pembangunan JDOM telah dimulakan sejak awal tahun 2000-an.
JDOM dan DOM terutamanya berbeza dalam dua aspek. Pertama, JDOM hanya menggunakan kelas konkrit dan bukan antara muka. Ini memudahkan API dalam beberapa cara, tetapi juga mengehadkan fleksibiliti. Kedua, API menggunakan kelas Koleksi secara meluas, memudahkan penggunaannya untuk pembangun Java yang sudah biasa dengan kelas ini.
Dokumentasi JDOM menyatakan bahawa tujuannya adalah untuk "menyelesaikan 80% (atau lebih) masalah Java/XML dengan 20% (atau kurang) usaha" (dengan andaian 20% berdasarkan keluk pembelajaran). JDOM sememangnya berguna untuk kebanyakan aplikasi Java/XML, dan kebanyakan pembangun mendapati API lebih mudah difahami daripada DOM. JDOM juga termasuk semakan yang agak meluas pada tingkah laku program untuk menghalang pengguna daripada melakukan apa-apa yang tidak masuk akal dalam XML. Walau bagaimanapun, ia masih memerlukan anda memahami XML dengan cukup baik untuk melakukan lebih daripada asas (atau memahami ralat dalam beberapa kes). Ini mungkin kerja yang lebih bermakna daripada mempelajari antara muka DOM atau JDOM.
JDOM sendiri tidak mengandungi penghurai. Ia biasanya menggunakan penghurai SAX2 untuk menghuraikan dan mengesahkan input dokumen XML (walaupun ia juga boleh mengambil perwakilan DOM yang dibina sebelum ini sebagai input). Ia mengandungi penukar kepada mengeluarkan perwakilan JDOM ke dalam aliran peristiwa SAX2, model DOM atau dokumen teks XML. JDOM ialah sumber terbuka yang dikeluarkan di bawah varian lesen Apache.
4.DOM4J
Walaupun DOM4J mewakili hasil pembangunan bebas sepenuhnya, pada mulanya, ia merupakan garpu pintar JDOM. Ia menggabungkan banyak ciri di luar perwakilan dokumen XML asas, termasuk sokongan XPath bersepadu, sokongan Skema XML dan pemprosesan berasaskan acara untuk dokumen besar atau penstriman. Ia juga menyediakan pilihan untuk membina perwakilan dokumen dengan keupayaan akses selari melalui API DOM4J dan antara muka DOM standard. Ia telah dibangunkan sejak separuh kedua tahun 2000.
Untuk menyokong semua ciri ini, DOM4J menggunakan antara muka dan kaedah kelas asas abstrak. DOM4J banyak menggunakan kelas Koleksi dalam API, tetapi dalam kebanyakan kes ia juga menyediakan alternatif yang membolehkan prestasi yang lebih baik atau pendekatan pengekodan yang lebih langsung. Faedah langsung ialah walaupun DOM4J membayar harga API yang lebih kompleks, ia memberikan fleksibiliti yang lebih besar daripada JDOM.
Sambil menambahkan fleksibiliti, penyepaduan XPath dan matlamat memproses dokumen besar, matlamat DOM4J adalah sama seperti JDOM: kemudahan penggunaan dan operasi intuitif untuk pembangun Java. Ia juga bertujuan untuk menjadi penyelesaian yang lebih lengkap daripada JDOM, mencapai matlamat mengendalikan pada dasarnya semua masalah Java/XML. Semasa mencapai matlamat itu, ia tidak memberikan penekanan berbanding JDOM untuk mencegah tingkah laku aplikasi yang salah.
DOM4J ialah API XML Java yang sangat, sangat baik dengan prestasi cemerlang, fungsi berkuasa dan kemudahan penggunaan yang melampau Ia juga merupakan perisian sumber terbuka. Pada masa kini anda dapat melihat bahawa semakin banyak perisian Java menggunakan DOM4J untuk membaca dan menulis XML Perlu dinyatakan bahawa JAXM Sun juga menggunakan DOM4J.
2. Untuk Perbandingan Java empat cara. untuk mengendalikan xml
1. DOM4J juga mempunyai prestasi yang cemerlang pada masa ini, DOM4J digunakan secara meluas dalam banyak projek sumber terbuka, seperti DOM4J yang terkenal untuk membaca fail konfigurasi XML . Jika kemudahalihan tidak dipertimbangkan, maka gunakan DOM4J.
2 JDOM dan DOM berprestasi buruk semasa ujian prestasi dan memori melimpah apabila menguji dokumen 10M. Ia juga patut dipertimbangkan untuk menggunakan DOM dan JDOM dalam kes dokumen kecil Walaupun pembangun JDOM telah menyatakan bahawa mereka menjangkakan untuk menumpukan pada isu prestasi sebelum keluaran rasmi, dari sudut prestasi, ia benar-benar tiada apa-apa untuk disyorkan. Di samping itu, DOM masih merupakan pilihan yang sangat baik. Pelaksanaan DOM digunakan secara meluas dalam banyak bahasa pengaturcaraan. Ia juga merupakan asas untuk banyak piawaian berkaitan XML lain, dan kerana ia disyorkan secara rasmi oleh W3C (berbanding dengan model Java berasaskan bukan standard), ia juga mungkin diperlukan dalam jenis projek tertentu (seperti menggunakan DOM dalam JavaScript).
3. SAX berprestasi lebih baik, yang bergantung pada kaedah penghuraian khusus - didorong oleh peristiwa. SAX mengesan aliran XML yang masuk, tetapi tidak memuatkannya ke dalam memori (sudah tentu apabila strim XML dibaca, beberapa dokumen akan disembunyikan buat sementara waktu dalam ingatan).
3. Penggunaan asas empat cara untuk mengendalikan xml
fail xml:
<?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>四川省XX市XX乡XX村XX组</ADDR> </VALUE> </RESULT> 1)DOM import java.io.*; import java.util.*; import org.w3c.dom.*; import javax.xml.parsers.*; public class MyXMLReader{ public static void main(String arge[]){ long lasting =System.currentTimeMillis(); try{ File f=new File("data_10k.xml"); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByTagName("VALUE"); for (int i=0;i<nl.getLength();i++){ System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); } }catch(Exception e){ e.printStackTrace(); } 2)SAX import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; public class MyXMLReader extends DefaultHandler { java.util.Stack tags = new java.util.Stack(); public MyXMLReader() { super(); } public static void main(String args[]) { long lasting = System.currentTimeMillis(); try { SAXParserFactory sf = SAXParserFactory.newInstance(); SAXParser sp = sf.newSAXParser(); MyXMLReader reader = new MyXMLReader(); sp.parse(new InputSource("data_10k.xml"), reader); } catch (Exception e) { e.printStackTrace(); } System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");} public void characters(char ch[], int start, int length) throws SAXException { String tag = (String) tags.peek(); if (tag.equals("NO")) { System.out.print("车牌号码:" + new String(ch, start, length)); } if (tag.equals("ADDR")) { System.out.println("地址:" + new String(ch, start, length)); } } public void startElement(String uri,String localName,String qName,Attributes attrs) { tags.push(qName);} } 3) JDOM import java.io.*; import java.util.*; import org.jdom.*; import org.jdom.input.*; public class MyXMLReader { public static void main(String arge[]) { long lasting = System.currentTimeMillis(); try { SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(new File("data_10k.xml")); Element foo = doc.getRootElement(); List allChildren = foo.getChildren(); for(int i=0;i<allChildren.size();i++) { System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText()); System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText()); } } catch (Exception e) { e.printStackTrace(); } } 4)DOM4J import java.io.*; import java.util.*; import org.dom4j.*; import org.dom4j.io.*; public class MyXMLReader { public static void main(String arge[]) { long lasting = System.currentTimeMillis(); try { File f = new File("data_10k.xml"); SAXReader reader = new SAXReader(); Document doc = reader.read(f); Element root = doc.getRootElement(); Element foo; for (Iterator i = root.elementIterator("VALUE"); i.hasNext() { foo = (Element) i.next(); System.out.print("车牌号码:" + foo.elementText("NO")); System.out.println("车主地址:" + foo.elementText("ADDR")); } } catch (Exception e) { e.printStackTrace(); } )
Atas ialah kandungan terperinci Bagaimana Java beroperasi pada xml. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!