XML sekarang telah menjadi format pertukaran data umum. Platform-independennya, independen-bahasa, dan independen sistem membawa kenyamanan besar pada integrasi dan interaksi data. Untuk pengetahuan sintaks dan detail teknis XML itu sendiri, Anda perlu membaca dokumen teknis yang relevan. Isi yang disertakan di sini termasuk DOM (model objek dokumen), DTD (definisi tipe dokumen), SAX (API sederhana untuk XML), XSD (definisi skema XML), XSLT (transformasi bahasa stylesheet yang dapat diperluas). Untuk detailnya, silakan merujuk ke dokumen situs web resmi W3C http://www.w3.org untuk informasi lebih lanjut.
Metode parsing XML adalah sama dalam bahasa yang berbeda, tetapi sintaks implementasinya berbeda. Ada dua metode analisis dasar, satu disebut saksofon dan yang lainnya disebut dom. SAX didasarkan pada analisis aliran acara, dan DOM didasarkan pada analisis struktur pohon dokumen XML. Misalkan konten dan struktur XML kami adalah sebagai berikut:
<? Xml Version = "1.0" encoding = "UTF-8"?> <shandleee> <sploewlee> <name> ddviplinux </name> <ceks> m </sely> <per use> 30 </anam> </sploudeee> </sploudeee>
Artikel ini menggunakan bahasa Java untuk mengimplementasikan generasi dan penguraian dokumen XML dari DOM dan SAX.
Pertama, tentukan antarmuka untuk mengoperasikan dokumen XML XMLDOCUMEN yang menentukan antarmuka untuk membangun dan mem -parsing dokumen XML.
/ **** @author hongliang.dinghl* Tentukan antarmuka antara pembentukan dokumen XML dan parsing*/ antarmuka publik xmldocument {/ *** Buat dokumen XML* @param file nama file nama lengkap*/ public void createxml (string filename); / *** Parse XML Dokumen* @param FileName File Nama Jalur Lengkap*/ public void parserxml (string fileName); } 1. Dom menghasilkan dan parses dokumen XML
Mendefinisikan satu set antarmuka untuk versi parsed dari dokumen XML. Parser membaca seluruh dokumen dan kemudian membangun struktur pohon residen memori, dan kode kemudian dapat menggunakan antarmuka DOM untuk mengoperasikan struktur pohon ini. Keuntungan: Seluruh pohon dokumen ada dalam memori, yang mudah dioperasikan; mendukung berbagai fungsi seperti penghapusan, modifikasi, dan penataan ulang; Kerugian: Seluruh dokumen ditransfer ke dalam memori (termasuk node yang tidak berguna), membuang -buang waktu dan ruang; Dalam penggunaan: Setelah dokumen diuraikan, perlu untuk mengakses data ini berkali -kali; Sumber Daya Perangkat Keras yang Cukup (Memori, CPU).
impor java.io.fileInputStream; impor java.io.filenotfoundException; impor java.io.fileoutputStream; impor java.io.ioException; impor java.io.inputstream; impor java.io.printwriter; impor javax.xml.parsers.documentBuilder; impor javax.xml.parsers.documentbuilderfactory; impor javax.xml.parsers.parserconfigurationException; impor javax.xml.transform.outputkeys; impor javax.xml.transform.transformer; impor javax.xml.transform.transformerconfigurationexception; impor javax.xml.transform.transformerexception; impor javax.xml.transform.transformerFactory; impor javax.xml.transform.dom.domsource; impor javax.xml.transform.stream.streamResult; impor org.w3c.dom.document; impor org.w3c.dom.element; impor org.w3c.dom.node; impor org.w3c.dom.nodelist; impor org.xml.sax.saxException; / ** * * @author hongliang.dinghl * DOM Generation and Parsing XML Dokumen */ kelas publik DOMDEMO mengimplementasikan xmldocument {dokumen dokumen privat; nama file string pribadi; public void init () {coba {DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance (); DocumentBuilder builder = factory.newDocumentBuilder (); this.document = builder.newDocument (); } catch (parserconfigurationException e) {System.out.println (e.getMessage ()); }} public void createxml (string fileName) {element root = this.document.createElement ("karyawan"); this.document.appendChild (root); Elemen karyawan = this.document.createelement ("karyawan"); Name elemen = this.document.createElement ("name"); name.appendChild (this.document.createTextNode ("ding hongliang")); karyawan.AppendChild (Nama); Elemen seks = this.document.createElement ("sex"); sex.appendChild (this.document.createTextNode ("m")); karyawan.AppendChild (seks); Elemen usia = this.document.createelement ("usia"); usia.AppendChild (this.document.createTextNode ("30")); karyawan.AppendChild (usia); root.AppendChild (karyawan); TransformerFactory TF = TransformerFactory.NewInstance (); coba {transformer transformer = tf.newtransformer (); Sumber DomSource = DomSource baru (dokumen); transformer.setoutputProperty (outputkeys.encoding, "GB2312"); transformer.setoutputProperty (outputkeys.indent, "yes"); Printwriter pw = printwriter baru (FileOutputStream baru (nama file)); Hasil StreamResult = StreamResult baru (PW); transformer.transform (sumber, hasil); System.out.println ("Hasilkan file XML berhasil!"); } catch (TransformerConfigurationException e) {System.out.println (e.getMessage ()); } catch (IllegalArgumentException e) {System.out.println (e.getMessage ()); } catch (FileNotFoundException e) {System.out.println (e.getMessage ()); } catch (TransformeRException e) {System.out.println (e.getMessage ()); }} public void parserxml (string fileName) {coba {DocumentBuilderFactory dbf = DocumentBuilderFactory.NewInstance (); DocumentBuilder db = dbf.newDocumentBuilder (); Dokumen dokumen = db.parse (nama file); NODELIST karyawan = document.getchildnodes (); for (int i = 0; i <o grearder.getLength (); i ++) {node karyawan = karyawan.item (i); Nodelist emplingeeInfo = usaha.getChildnodes (); untuk (int j = 0; j <employeeInfo.getLength (); j ++) {node node = emplingeeInfo.item (j); NodeList groomeeemeta = node.getChildnodes (); untuk (int k = 0; k <mempekerjakan mempekerjakan.getlength (); k ++) {System.out.println (groeementeeemeta.item (k) .getnodename () + ":" + groomeeemeta.item (k) .gettextContent ()); }}} System.out.println ("Parsermeta.item (k) .getTextContent ());} catch (FileNotFoundException e) {System.out.println (e.getMessage ());} catch (ParserconFigurationException E) {System.out.out. (ParserconfigurationException e) {System.out.println (E.GetMessage ()); 2. Sax menghasilkan dan mem -parsing dokumen XML
Untuk menyelesaikan masalah DOM, saksofon muncul. Saksofon, didorong oleh acara. Ketika parser menemukan awal elemen, akhir dari suatu elemen, awal atau akhir dokumen, dll., Ini mengirim acara, dan programmer menulis kode untuk menanggapi peristiwa ini dan menyimpan data. Keuntungan: Tidak perlu memasukkan seluruh dokumen terlebih dahulu, dibutuhkan lebih sedikit sumber daya; Kode Parser SAX lebih kecil dari kode DOM Parser, cocok untuk applet dan unduhan. Kekurangan: tidak gigih; Setelah suatu peristiwa, jika data tidak disimpan, data akan hilang; kewarganegaraan; Hanya teks yang dapat diperoleh dari acara tersebut, tetapi tidak tahu elemen dari teks mana; Acara Penggunaan: Applet; Hanya sejumlah kecil konten dari dokumen XML yang diperlukan, dan jarang kembali ke akses; memori mesin rendah;
impor java.io.fileInputStream; impor java.io.filenotfoundException; impor java.io.ioException; impor java.io.inputstream; impor javax.xml.parsers.parserconfigurationException; impor javax.xml.parsers.saxparser; impor javax.xml.parsers.saxparserFactory; impor org.xml.sax.attributes; impor org.xml.sax.saxException; impor org.xml.sax.helpers.defaulthandler; / ** * * @author hongliang.dinghl * Sax Document Parsing */ kelas publik SaxDemo mengimplementasikan xmldocument {public void createxml (string filename) {System.out.println ("<<"+FileName+">>"); } public void parserxml (string filename) {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 ("karyawan")) {return; } if (qname.equals ("karyawan")) {System.out.println (qname); } if (attributes.getLength ()> 0) {this.attributes = atribut; this.hasattribute = true; }} public void endElement (String URI, String LocalName, String QName) melempar SAXException {if (HasAttribute && (atribut! = null)) {for (int i = 0; i <atributs.getLength (); i ++) {System.out.println (attributes.getQnute (); i ++) {System.out.println (attribute.getQ.getQ.get.getQ.get. }}} karakter public void (char [] ch, int start, int length) melempar saxexception {system.out.println (string baru (ch, start, length)); }} paket com.alisoft.facepay.framework.bean; impor java.io.fileInputStream; impor java.io.filenotfoundException; impor java.io.ioException; impor java.io.inputstream; impor javax.xml.parsers.parserconfigurationException; impor javax.xml.parsers.saxparser; impor javax.xml.parsers.saxparserFactory; impor org.xml.sax.attributes; impor org.xml.sax.saxException; impor org.xml.sax.helpers.defaulthandler; / ** * * @author hongliang.dinghl * Sax Document Parsing */ kelas publik SaxDemo mengimplementasikan xmldocument {public void createxml (string filename) {System.out.println ("<<"+FileName+">>"); } public void parserxml (string filename) {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 ("karyawan")) {return; } if (qname.equals ("karyawan")) {System.out.println (qname); } if (attributes.getLength ()> 0) {this.attributes = atribut; this.hasattribute = true; }} public void endElement (String URI, String LocalName, String QName) melempar SAXException {if (HasAttribute && (atribut! = null)) {for (int i = 0; i <atributs.getLength (); i ++) {System.out.println (attributes.getQnute (); i ++) {System.out.println (attribute.getQ.getQ.get.getQ.get. }}} karakter public void (char [] ch, int start, int length) melempar saxexception {system.out.println (string baru (ch, start, length)); }}3. DOM4J menghasilkan dan parses dokumen XML
DOM4J adalah Java XML API yang sangat, sangat baik, dengan kinerja yang sangat baik, fungsi yang kuat dan sangat mudah digunakan, dan 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.
impor java.io.file; impor java.io.filewriter; impor java.io.ioException; impor java.io.writer; impor java.util.iterator; impor org.dom4j.document; impor org.dom4j.documentException; impor org.dom4j.documenthelper; impor org.dom4j.element; impor org.dom4j.io.saxreader; impor org.dom4j.io.xmlwriter; / ** * * @author hongliang.dinghl * dom4j menghasilkan dokumen xml dan parse dokumen xml */ kelas publik dom4jdemo mengimplementasikan xmldocument {public void createxml (string fileName) {document = documentHelper.createdocument (); Elemen karyawan = document.addelement ("karyawan"); Elemen karyawan = karyawan.addelement ("karyawan"); Name elemen = karyawan.addelement ("name"); name.setText ("ddvip"); Elemen seks = karyawan.addelement ("sex"); sex.setText ("m"); Elemen usia = karyawan.addelement ("usia"); usia.setText ("29"); coba {writer fileWriter = FileWriter baru (nama file); Xmlwriter xmlwriter = xmlwriter baru (FileWriter); xmlwriter.write (dokumen); xmlwriter.close (); } catch (ioException e) {System.out.println (e.getMessage ()); }} public void parserxml (string fileName) {file inputxml = file baru (nama file); Saxreader Saxreader = Saxreader baru (); coba {dokumen dokumen = saxreader.read (inputxml); Elemen karyawan = document.getrooteLement (); untuk (iterator i = karyawan.elementIterator (); i.hasnext ();) {elemen karyawan = (elemen) i.next (); untuk (iterator j = usaha.elementiterator (); j.hasnext ();) {elemen node = (elemen) j.next (); System.out.println (node.getName ()+":"+node.getText ()); }}} catch (DocumentException e) {System.out.println (e.getMessage ()); } System.out.println ("DOM4J Parserxml"); }}4. JDom menghasilkan dan mem -parsing xml
Untuk mengurangi jumlah pengkodean DOM dan Saksofon, JDom telah muncul; Keuntungan: Prinsip 20-80, sangat mengurangi jumlah kode. Gunakan Occasions: Fungsi yang akan diimplementasikan sederhana, seperti parsing, membuat, dll., Tetapi di bagian bawah, JDOM masih menggunakan saksofon (paling umum digunakan), DOM, dan dokumen Xanan.
impor java.io.filenotfoundException; impor java.io.fileoutputStream; impor java.io.ioException; impor java.util.list; impor org.jdom.document; impor org.jdom.element; impor org.jdom.jdomexception; impor org.jdom.input.saxbuilder; impor org.jdom.output.xmloutputter; / ** * * @author hongliang.dinghl * jdom menghasilkan dan parse dokumen xml * */ kelas publik jdomDemo mengimplementasikan xmldocument {public void createxml (string filename) {dokumen dokumen; Root elemen; root = elemen baru ("karyawan"); dokumen = dokumen baru (root); Elemen karyawan = elemen baru ("karyawan"); root.addcontent (karyawan); Elemen nama = elemen baru ("name"); name.setText ("ddvip"); karyawan.addcontent (nama); Elemen seks = elemen baru ("seks"); sex.setText ("m"); karyawan.addcontent (seks); Elemen usia = elemen baru ("usia"); usia.setText ("23"); karyawan.addcontent (usia); Xmloutputter xmlout = xmloutputter baru (); coba {xmlout.output (dokumen, fileOutputStream baru (nama file)); } catch (FileNotFoundException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }} public void parserxml (string fileName) {saxbuilder builder = baru saxbuilder (false); coba {dokumen dokumen = builder.build (nama file); Elemen karyawan = document.getrooteLement (); Daftar karyawan = karyawan.getchildren ("karyawan"); untuk (int i = 0; ielement wajib = (elemen) karyawan.get (i); daftar karyawan kerja = karyawan.getChildren (); untuk (int j = 0; jsystem.out.println ((elemen)}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} eveiNeIne (elemen (elemen)). (JDomException E) {E.PrintStackTrace ();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.