Ringkasan beberapa cara untuk parse xml oleh java
Tipe pertama: DOM.
Nama lengkap DOM adalah model objek dokumen, yang merupakan model objek dokumen. Dalam suatu aplikasi, penganalisa XML berbasis DOM mengubah dokumen XML menjadi kumpulan model objek (biasanya disebut pohon DOM). Aplikasi ini mengimplementasikan pengoperasian data dokumen XML melalui operasi pada model objek ini. Melalui antarmuka DOM, aplikasi dapat mengakses bagian data apa pun dalam dokumen XML kapan saja. Oleh karena itu, mekanisme ini menggunakan antarmuka DOM juga disebut mekanisme akses acak.
Antarmuka DOM menyediakan cara untuk mengakses informasi dokumen XML melalui model objek hierarkis. Model objek hierarkis ini membentuk pohon simpul berdasarkan struktur dokumen XML. Terlepas dari jenis informasi yang dijelaskan dalam dokumen XML, bahkan data tabulasi, daftar proyek atau dokumen, model yang dihasilkan menggunakan DOM adalah dalam bentuk pohon simpul. Artinya, DOM memaksa penggunaan model pohon untuk mengakses informasi dalam dokumen XML. Karena XML pada dasarnya adalah struktur hierarkis, metode deskripsi ini cukup efektif.
Metode akses acak yang disediakan oleh Tree DOM membawa fleksibilitas besar untuk pengembangan aplikasi, dan secara sewenang -wenang dapat mengontrol konten di seluruh dokumen XML. Namun, karena DOM Analyzer mengubah seluruh dokumen XML menjadi pohon DOM dan memasukkannya ke dalam memori, persyaratan memori relatif tinggi ketika dokumen lebih besar atau strukturnya relatif kompleks. Selain itu, melintasi pohon dengan struktur yang kompleks juga merupakan operasi yang memakan waktu. Oleh karena itu, penganalisa DOM memiliki persyaratan yang relatif tinggi untuk kinerja mesin dan efisiensi implementasinya tidak terlalu ideal. Namun, karena gagasan struktur pohon yang diadopsi oleh DOM Analyzer konsisten dengan struktur dokumen XML, dan mengingat kenyamanan yang dibawa oleh akses acak, DOM Analyzer masih memiliki berbagai nilai yang berguna.
impor java.io.file; impor javax.xml.parsers.documentBuilder; impor javax.xml.parsers.documentbuilderfactory; impor org.w3c.dom.document; impor org.w3c.dom.element; impor org.w3c.dom.nodelist; Public Class DOMTEST1 {public static void main (String [] args) melempar Exception {// Langkah 1: Dapatkan Pabrik Dom Parser (fungsi karya ini adalah untuk membuat parser spesifik) DocumentBuilderFactory DBF = DocumentBuilderFactory.newinstance (); // System.out.println ("Nama kelas:" + dbf.getClass (). GetName ()); // Langkah 2: Dapatkan DOM Parser DocumentBuilder spesifik db = dbf.newdocumentBuilder (); // System.out.println ("Nama kelas:" + db.getClass (). GetName ()); // Langkah3: Parse dokumen XML dan dapatkan objek dokumen (node root) dokumen = db.parse (file baru ("candidate.xml")); NodeList list = document.geteLementsbyTagname ("orang"); untuk (int i = 0; i <list.getLength (); i ++) {element element = (element) list.item (i); String content = element.getElementsbyTagname ("name"). Item (0) .getFirstChild (). GetNodevalue (); System.out.println ("Name:" + Content); content = element.getElementsbyTagname ("alamat"). Item (0) .getFirstChild (). getNodevalue (); System.out.println ("Alamat:" + konten); content = element.getElementsbyTagname ("tel"). item (0) .getFirstChild (). getNodevalue (); System.out.println ("Tel:" + konten); content = element.getElementsbyTagname ("fax"). item (0) .getFirstChild (). getNodevalue (); System.out.println ("Faks:" + konten); content = element.getElementsbyTagname ("email"). Item (0) .getFirstChild (). getNodevalue (); System.out.println ("Email:" + konten); System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- impor java.io.file; impor javax.xml.parsers.documentBuilder; impor javax.xml.parsers.documentbuilderfactory; impor org.w3c.dom.attr; impor org.w3c.dom.comment; impor org.w3c.dom.document; impor org.w3c.dom.element; impor org.w3c.dom.namednodemap; impor org.w3c.dom.node; impor org.w3c.dom.nodelist; / ** * Gunakan secara rekursif untuk menguraikan dokumen XML yang diberikan dan output isinya ke baris perintah * @author zhanglong * */ kelas publik domtest3 {public static void main (string [] args) melempar pengecualian {DocumentBuilderFactory dbf = documentbuilderfactory.newinsance ();); DocumentBuilder db = dbf.newDocumentBuilder (); Dokumen doc = db.parse (file baru ("student.xml")); // Dapatkan elemen elemen root elemen root = doc.getDocumentElement (); parseElement (root); } private static void parseElement (elemen elemen) {string tagName = element.getNodename (); Nodelist children = element.getchildnodes (); System.out.print ("<" + tagname); // Objek NamedNodemap yang terdiri dari semua atribut elemen elemen perlu dinilai pada namedNodemap Map = element.getAttributes (); // Jika elemen memiliki atribut if (null! = Peta) {for (int i = 0; i <map.getLength (); i ++) {// Dapatkan setiap atribut elemen attr attr = (attr) map.item (i); String attrName = attr.getName (); String attrvalue = attr.getValue (); System.out.print ("" + attrname + "=/" " + attrvalue +"/""); }} System.out.print (">"); untuk (int i = 0; i <children.getLength (); i ++) {node node = children.item (i); // Dapatkan jenis node pendek nodetype = node.getNodetype (); if (nodetype == node.element_node) {// Ini adalah elemen, lanjutkan ke node parseElement ((elemen)); } else if (nodetype == node.text_node) {// rekursif exit system.out.print (node.getNodevalue ()); } else if (nodetype == node.comment_node) {System.out.print ("<!-"); Komentar komentar = (komentar) node; // KOMENTAR Konten String Data = Comment.getData (); System.out.print (data); System.out.print ("->"); }} System.out.print ("</" + tagname + ">"); }}Sax: Nama lengkap Sax adalah API sederhana untuk XML, yang merupakan antarmuka program aplikasi XML sederhana. Tidak seperti DOM, mode akses yang disediakan oleh SAX adalah mode berurutan, yang merupakan cara untuk dengan cepat membaca dan menulis data XML. Ketika dokumen XML dianalisis menggunakan Sax Analyzer, serangkaian peristiwa akan dipicu dan fungsi penanganan acara yang sesuai akan diaktifkan. Aplikasi dapat mengakses dokumen XML melalui fungsi penanganan acara ini. Oleh karena itu, antarmuka SAX juga disebut antarmuka yang digerakkan oleh peristiwa.
impor java.io.file; 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; Public Class SAXTEST1 {public static void main (string [] args) melempar Exception {// Step1: dapatkan instance pabrik parser Sax Parser Factory SaxParserFactory = SaxParserFactory.NewInstance (); // Step2: Dapatkan Sax Parser Instance Saxparser parser = factory.newsaxparser (); // Langkah3: Mulai Parser.parse (file baru ("Student.xml"), New MyHandler ()); }} class myhandler memperluas defaulthandler {@Override public void startDocument () melempar saxexception {system.out.println ("parse start"); } @Override public void endDocument () melempar SaxException {System.out.println ("Parse finish"); } @Override public void startElement (String URI, String LocalName, String QName, Atribut Atribut) Melempar SaxException {System.out.println ("Mulai Elemen"); } @Override public void endElement (String URI, String LocalName, String QName) Melempar SaxException {System.out.println ("Finish Element"); }} impor java.io.file; impor java.util.stack; 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; kelas publik saxtest2 {public static void main (string [] args) melempar Exception {SaxParserFactory factory = saxparserfactory.newinstance (); Saxparser parser = factory.newsaxparser (); parser.parse (file baru ("student.xml"), new MyHandler2 ()); }} class myHandler2 memperluas defaulthandler {private stack <string> stack = new stack <string> (); nama string pribadi; Jenis kelamin string pribadi; usia string pribadi; @Override public void startElement (String URI, String LocalName, String QName, Atribut Atribut) Melempar SaxException {stack.push (qname); untuk (int i = 0; i <attributes.getLength (); i ++) {string attrname = attributes.getQname (i); String attrvalue = attributes.getValue (i); System.out.println (attrname + "=" + attrvalue); }} @Override public void karakter (char [] ch, int start, int length) melempar saxexception {string tag = stack.peek (); if ("name" .equals (tag)) {name = new string (ch, start, length); } else if ("gender" .equals (tag)) {gender = string baru (ch, start, length); } lain jika ("usia" .Equals (tag)) {usia = string baru (ch, mulai, panjang); }} @Override public void endElement (String URI, String LocalName, String QName) Melempar SaxException {stack.pop (); // Tunjukkan bahwa elemen telah diuraikan dan perlu keluar dari tumpukan IF ("Siswa" .Equals (QName)) {System.out.println ("Nama:" + Nama); System.out.println ("Jenis Kelamin:" + Jenis Kelamin); System.out.println ("Umur:" + usia); System.out.println (); }}}JDom:
JDom adalah proyek open source berdasarkan struktur pohon dan menggunakan teknologi Java murni untuk mengimplementasikan parsing, menghasilkan, membuat serial, dan berbagai operasi pada dokumen XML. (http://jdom.org)
• JDom secara langsung melayani pemrograman Java. Ini menggunakan banyak fitur dari bahasa Java yang lebih kuat (Metode Overloading, Konsep Koleksi, dll.) Untuk secara efektif menggabungkan fungsi saksofon dan DOM.
• JDom adalah fungsi API baru untuk membaca, menulis, dan mengoperasikan XML dalam bahasa Java. Fungsi API ini dioptimalkan hingga tingkat maksimum di bawah premis keterusterangan, kesederhanaan, dan efisiensi.
JDom Buat XML
impor java.io.filewriter; impor org.jdom.attribute; impor org.jdom.comment; impor org.jdom.document; impor org.jdom.element; impor org.jdom.output.format; impor org.jdom.output.xmloutputter; kelas publik jdomtest1 {public static void main (string [] args) melempar pengecualian {dokumen dokumen = dokumen baru (); Elemen root = elemen baru ("root"); document.addcontent (root); Komentar komentar = komentar baru ("Ini komentar saya"); root.addcontent (komentar); Elemen e = elemen baru ("halo"); e.setAttribute ("Sohu", "www.sohu.com"); root.addcontent (e); Elemen e2 = elemen baru ("dunia"); Attribute attr = Atribut baru ("tes", "hehe"); e2.setAttribute (attr); e.addcontent (E2); e2.addcontent (elemen baru ("aaa"). setattribute ("a", "b") .setAttribute ("x", "y"). setattribute ("gg", "hh"). setext ("konten teks")); Format format = format.getPrettyFormat (); format.setindent (""); // format.setencoding ("gbk"); Xmloutputter out = xmloutputter baru (format); out.output (dokumen, fileWriter baru ("jdom.xml")); }}JDom Parsing XML
impor java.io.file; impor java.io.fileoutputStream; impor java.util.list; impor org.jdom.attribute; impor org.jdom.document; impor org.jdom.element; impor org.jdom.input.saxbuilder; impor org.jdom.output.format; impor org.jdom.output.xmloutputter; kelas publik jdomtest2 {public static void main (string [] args) melempar pengecualian {saxbuilder builder = baru saxbuilder (); Dokumen doc = builder.build (file baru ("jdom.xml")); Elemen elemen = doc.getrooteLement (); System.out.println (element.getName ()); Elemen hello = element.getChild ("hello"); System.out.println (hello.getText ()); Daftar daftar = hello.getAttributes (); untuk (int i = 0; i <list.size (); i ++) {attribute attr = (attribute) list.get (i); String attrName = attr.getName (); String attrvalue = attr.getValue (); System.out.println (attrname + "=" + attrvalue); } hello.removechild ("dunia"); Xmloutputter out = xmloutputter baru (format.getPrettyFormat (). SetIndent ("")); out.output (doc, fileoutputStream baru ("jdom2.xml")); }}Dom4j
impor java.io.fileoutputStream; impor java.io.filewriter; impor org.dom4j.document; impor org.dom4j.documenthelper; impor org.dom4j.element; impor org.dom4j.io.outputformat; impor org.dom4j.io.xmlwriter; Public Class test1 {public static void main (string [] args) melempar Exception {// Buat dokumen dan atur node elemen root dokumen: metode pertama // dokumen = documentHelper.createdocument (); // // elemen root = documenthelper.createelement ("siswa"); // // document.setrootelement (root); // Buat dokumen dan atur node elemen root dari dokumen: elemen metode kedua root = documentHelper.createElement ("siswa"); Dokumen dokumen = DocumentHelper.createdocument (root); root.addattribute ("name", "zhangsan"); Elemen helloelement = root.addelement ("hello"); Elemen worldElement = root.addelement ("world"); Helloelement.setText ("Hello"); WorldElement.SetText ("World"); helloelement.addattribute ("usia", "20"); Xmlwriter xmlwriter = xmlwriter baru (); xmlwriter.write (dokumen); OutputFormat format = outputFormat baru ("", true); Xmlwriter xmlwriter2 = xmlwriter baru (FileOutputStream baru ("Student2.xml"), format); xmlwriter2.write (dokumen); Xmlwriter xmlwriter3 = xmlwriter baru (FileWriter baru ("student3.xml"), format); xmlwriter3.write (dokumen); xmlwriter3.close (); }} impor java.io.file; impor java.util.iterator; impor java.util.list; impor javax.xml.parsers.documentBuilder; impor javax.xml.parsers.documentbuilderfactory; impor org.dom4j.document; impor org.dom4j.element; impor org.dom4j.io.domreader; impor org.dom4j.io.saxreader; Public Class Test2 {public static void main (string [] args) melempar Exception {saxreader saxreader = baru saxreader (); Dokumen doc = saxreader.read (file baru ("student2.xml")); Elemen root = doc.getrooteLement (); System.out.println ("Elemen root:" + root.getName ()); Daftar ChildList = root.elements (); System.out.println (ChildList.size ()); Daftar ChildList2 = Root.elements ("Hello"); System.out.println (childlist2.size ()); Elemen pertama = root.element ("halo"); System.out.println (first.attributeValue ("usia")); untuk (iterator iter = root.elementiterator (); iter.hasnext ();) {elemen e = (elemen) iter.next (); System.out.println (E.AttributeValue ("Age")); } System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ DocumentBuilderFactory.NewInstance (); domreader.read (dokumen); impor java.io.filewriter; impor org.jdom.attribute; impor org.jdom.document; impor org.jdom.element; impor org.jdom.output.format; impor org.jdom.output.xmloutputter; test kelas publik3 {public static void main (string [] args) melempar pengecualian {dokumen dokumen = dokumen baru (); Elemen root = elemen baru ("Daftar Kontak"). SetAttribute (Atribut Baru ("Perusahaan", "Grup A")); document.addcontent (root); Elemen contactPerson = elemen baru ("kontak"); root.addcontent (contactPerson); ContactPerson .AddContent (elemen baru ("Name"). Settext ("Zhang San")) .AddContent (elemen baru ("Perusahaan"). Settext ("Company")) .AddContent (elemen baru ("Tel"). SetText ("021-5556666" "))). Element ("street"). Setext ("5th street")) .addcontent (elemen baru ("kota"). Setext ("shanghai"))) .addcontent (elemen baru ("provinsi"). Setext ("shanghai"))); Xmloutputter output = xmloutputter baru (format.getPrettyFormat () .setIndent ("). Setencoding (" gbk ")); output.output (dokumen, fileWriter baru (" contact.xml "));}}