DOM4J PENDAHULUAN
Alamat proyek DOM4J: http://sourceforge.net/projects/dom4j/?source=directory
DOM4J adalah perpustakaan open source sederhana untuk menangani XML, XPath dan XSLT.
DOM4J menggunakan DOM4J setelah mengunduh proyek DOM4J, unzip dan tambahkan paket JAR-nya (versi saya saat ini disebut DOM4J-1.6.1.jar) ke jalur kelas.
(Properties-> Java Build Path-> Tambahkan stoples eksternal ...).
Kemudian Anda dapat menggunakan API yang disediakan untuk pemrograman.
Contoh program 1
Program pertama menggunakan kode Java untuk menghasilkan dokumen XML, dan kode adalah sebagai berikut:
Paket com.example.xml.dom4j; impor java.io.fileoutputStream; impor java.io.filewriter; impor org.dom4j.document; impor org.dom4j.documenthel per; impor org.dom4j.element; impor org.dom4j. io .OutputFormat; impor org.dom4j.io.xmlwriter;/** * DOM4J Framework belajar menggunakan kerangka kerja DOM4J untuk membuat dokumen XML dan output dan menyimpan * */kelas publik DOM4JTest1 {public static void Main (Strin G [] args) melempar Exception {// Metode pertama: Buat dokumen dan buat elemen root // Buat dokumen: Gunakan dokumen kelas helper = documentHelper.createdocument (); root = documenthelper.createelement ("st udent"); Document2 = DocumentHelp er.Createdocument (root2); Elemen WorldElement = root2.Add Element ("World"); .writ e (dokumen); // output ke file// format outputFormat format = outputFormat baru ("", true); // Atur indentation ke 4 spaces dan perilaku baru adalah xmlwriter xmlwriter2 baru = new xmlwriter (FileOutputStream baru ( "Stud ent.xml"), format); FileWriter ("Student2.xml"), format);
Output Konsol Program:
<? Xml Version = "1.0" encoding = "UTF-8"?> <Student/>
Dokumen XML yang dihasilkan:
<? Xml Version = "1.0" encoding = "UTF-8"?> <nama siswa = "zhangsan"> <hello> halo teks </hello> <dorlem> Teks dunia </bordor> </student>
Contoh Program 2
Contoh Program 2, Baca dokumen XML dan analisis, dan keluarkan isinya.
Pertama, dokumen yang akan dianalisis adalah sebagai berikut:
<? Xml Version = "1.0" encoding = "UTF-8"?> <Siswa Nama = "Zhangsan"> <hello name = "lisi"> hello text1 </hello> <hello name = "lisi2"> hello text2 < ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::: "> World Text1 </borleh> <nama dunia =" wangwu2 "> World Text2 </borleh> <world> dunia te xt3 </borleh> </student> paket com.example.xml.dom4j; import java.io. File; import java.util.iterator; impor java.util.list; impor javax.xml.parsers .documentBuilder; impor javax. .dom4j.io.domreader; impor org.dom4j.io.saxread er;/** * Dom4j Framework Learning: Baca dan Parse XML * * */Kelas Publik Dom4jtest2 {public static Main (String [] args) melempar pengecualian { SaxReader SaxReader = SaxReader baru (); " + root.getName ()); // Dapatkan semua daftar elemen anak <sement> childList = root.elements (); sistem. elemen anak dari daftar nama tertentu <sement> childList2 = root.elements ("hello"); elemen nama yang ditentukan FirstWorldElement = root.element ("World"); attributevalue ("name")); Iterator iter = root.elementiterator (); println ("Gunakan Domreader --------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------ DocumentBuilderFactory dbf = DocumentBuilderfactory.newInstance (); w3c.dom.document harus digunakan Document2 = db.parse (file baru ("Student.xml")); Elemen rooteLement = document3Get rooteLement ();
Setelah kode dijalankan, outputnya adalah:
ROOT: Studentstotal Child Count: 6Hello Child: 3 Pertama Dunia ATTR: Nama = output iteratif wangwu -------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------- Ader ----- ------ ------------------ Root: Siswa
Sax Parses XML
Berikut ini adalah langkah -langkah untuk mengimplementasikan penguraian entitas dalam saksofon
// Berikut ini adalah xmlreader untuk parse (i) Langkah 1: Buat kelas baru SaxparserFactory, kodenya adalah sebagai berikut:
SaxparserFactory Factory = SaxparserFactory.NewInstance ();
(2) Langkah 2: Biarkan kelas pabrik menghasilkan Sax Parser Class Saxparser, kodenya adalah sebagai berikut:
Saxparser parser = factory.newsaxparser ();
(Iii) Langkah 3: Dapatkan instance xmlreader dari Saxpsrser, kodenya adalah sebagai berikut:
Xmlreader reader = parser.getXmlreader ();
(4) Langkah 4: Daftarkan pawang yang Anda tulis di XMLReader.
reader.setContenthandler (ini);
(V) Langkah 5: Setelah mengubah dokumen atau sumber daya XML menjadi aliran inputstream yang dapat diproses Java, parsing secara resmi dimulai, dan kodenya adalah sebagai berikut:
reader.parse (inputSource baru (IS));
// Berikut ini adalah menggunakan Saxparser untuk parse (i) Langkah pertama: Buat kelas baru SaxparserFactory, kodenya adalah sebagai berikut:
SaxparserFactory Factory = SaxparserFactory.NewInstance ();
(2) Langkah 2: Biarkan kelas pabrik menghasilkan Sax Parser Class Saxparser, kodenya adalah sebagai berikut:
Saxparser parser = factory.newsaxparser ();
(3) Langkah 3: Setelah mengubah dokumen atau sumber daya XML menjadi aliran inputstream yang dapat diproses Java, parsing secara resmi dimulai, dan kodenya adalah sebagai berikut:
parser.parse (is, ini);
Saya kira semua orang telah melihat ContentHandler.
// Tetapkan objek Locator yang dapat menemukan lokasi di mana peristiwa konten dokumen terjadi
SetDocumentLocator public void (locator locator)
// Digunakan untuk menangani acara start parsing dokumen
public void startDocument () melempar SaxException
// Proses acara Mulai Elemen, dan Anda dapat memperoleh URI, nama elemen, tabel kelas atribut dan informasi lain dari namespace di mana elemen tersebut terletak dari parameter.
StartElement public void (String namespacesuri, string localname, string qname, atribut atts) melempar saxexception
// Tangani acara elemen akhir, dan Anda dapat memperoleh URI, nama elemen, dan informasi lain dari namespace di mana elemen berada dari parameter.
endelement void public (string namespacesuri, string localname, string qname) melempar saxexception
// Proses konten karakter elemen, dan Anda bisa mendapatkan konten dari parameter
Karakter public void (char [] ch, int start, int length) melempar saxexception
Ngomong -ngomong, mari kita perkenalkan metode dalam xmlreader.
// Daftarkan dan tangani dokumen XML Parsing Content Handller
Public Void SetContenthandler (ContentHandler Handler)
// Mulai parsing dokumen XML
public void parse (inputsorce input) melempar Saxexception
Saya sudah selesai berbicara.
Paket Com.example.demo; ) {return _id;} public void set_id (string _id) {this._id = _id; () {return _age;} public void set_age (string _age) {this._age = _age;
Selanjutnya kami ingin mengimplementasikan ContentHandler untuk parse XML
Menerapkan ContentHandler umumnya membutuhkan langkah -langkah berikut
1. Deklarasikan kelas dan mewarisi defaulthandler. DeFaulthandler adalah kelas dasar, yang hanya mengimplementasikan ContentHandler. Kita hanya perlu menulis ulang metode di dalamnya.
2. Tulis ulang startDocument () dan enddocument ().
3. Tulis ulang startelement (). Seringkali, beberapa data dioperasikan dalam fungsi ini dengan menilai nilai LocalName.
4. Tulis ulang metode karakter (), yang merupakan metode panggilan balik. Setelah parser mengeksekusi startelement (), metode ini akan dieksekusi setelah mem -parsing konten node, dan parameter ch [] adalah konten node.
5. Tulis ulang metode endelement (). DEFAULTHANDLER DAN REE Tulis metode berikut
Kelas publik SAX_PARSERXML memperluas defaulthandler { / *** Acara ini akan dipicu saat mem-parsing deklarasi file XML. Metode Stub Super.StartDocument ();} / *** Acara ini akan dipicu saat mem -parsing tag mulai dari suatu elemen** / @override void startelement (String URI, String LocalName, String Qn AME, Atribut Atribut) melempar SAXException SaxException {// TODO METODE AUTO-ENTERASI STUK Super.Startelement (URI, LocalName, QName, Atribut); ] ch, int start, int length) melempar SaxException {// TODO METODE AUTO-AUTO-STUK SUPER.CHARACTERS (CH, MULAI, PANJANG); @Override public void endElement (String URI, String LocalName, String QName) Melempar SaxException {// TODO Metode yang dihasilkan secara otomatis Stub Super.endelement t (URI, LocalName, QName);
Pertama, kami membuat daftar untuk menyimpan data orang yang diuraikan
Daftar <sone> orang;
Tetapi? Dimana untuk diinisialisasi? Kami dapat menginisialisasi di startDocument (), karena peristiwa ini akan dipicu saat mem -parsing deklarasi file XML, jadi lebih tepat untuk meletakkannya di sini
/ *** Peristiwa ini akan dipicu saat mem-parsing deklarasi file XML. );
Selanjutnya, kita akan mulai menganalisis
/ *** Acara ini akan dipicu saat mem-parsing tag mulai dari suatu elemen**/ @override public void startelement (String URI, String LocalName, String QName, Atribut Atribut) Melempar SaxException {// TODO Metode yang dihasilkan secara otomatis Stubered Stub Super .StartElement (URI, LocalName, Qname, Atribut); atribute.getValue ("id"));
Dalam kode di atas, LocalName mewakili nama elemen yang saat ini diuraikan
// Langkah // 1. ** * Acara ini dipicu saat membaca elemen teks. , mulai, panjang); Equals ("Name")) {// Tambahkan nilai yang diambil ke Object Person.set_name (txt);
Berikutnya adalah apa yang perlu Anda lakukan saat tag berakhir
/ *** Acara ini akan dipicu saat tag akhir dibaca**/ @Override public void endElement (String URI, String LocalName, String QName) Melempar SaxException {// Todo Auto-Gen Metode Erupted Stub Super.endelement (URI , localname, qname); ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::: "";
Analisisnya mungkin prosesnya
1. Metode StartElement akan dipanggil pada awal elemen.
2. Metode karakter akan dipanggil berikutnya, yang dapat digunakan untuk mendapatkan nilai elemen.
3. Ketika suatu elemen berakhir, metode endelement akan dipanggil setelah parsing selesai.
DAFTAR PUBLIK <Person> ReadXML (InputStream IS) {SaxParserFactory Factory = SaxParserFactory.NewInstance (); Metode Kedua XMLREADER READER = PARSER.GETXMLREADER (); Return orang;}
Kode di atas tidak menjelaskan.
paket com.example.demo.utils; .xml.sax.attributes; Demo. Saxparser Parser = Factory.NewSaxParser (); (InputSource baru (IS)); Anda dapat melakukan beberapa pekerjaan inisialisasi* / @override void startDocument () melempar SaxException {// TODO Metode yang dihasilkan secara otomatis Stub Super.StartDocument (); * * Acara ini akan dipicu saat mem-parsing tag start dari elemen * */ @Override void startElement (String URI, String LocalName, String QName, Atribut Atribut) Melempar SA XException {// TODO Metode yang dihasilkan Auto-Metode Stub Super. StartElement (URI, LocalName, QName, Atribut); .getValue ("id")); Melempar Episode SAXEXC {// TODO Metode yang dihasilkan secara otomatis Stub Super.characters (CH, MULAI, PANJANG); Mulai, panjang); // Tentukan apakah elemen adalah nama jika (curnode.equals ("name")) {// Tambahkan nilai yang diambil ke orang objek orang.set_name (txt); "Umur")) {orang. Melempar Episode SAXEXC {// TODO METODE AUTO-DIGIRI STUK SUPER.ENDELEMENT (URI, LOCALNAME, QNAME); orang! = null) {p ersons.add (orang);
Tulis metode untuk memanggil kelas ini
Daftar <sone> orang = Sax_parserxml baru (). Readxml (IS); ); .get_age () + "/n");} toast.maketext (aktivitas, buffer, toast.length_long) .show ();
Jika Anda melihat deskripsi antarmuka berikut, analisis telah berhasil ~
ringkasan:
DOM (Model Objek File) Parsing: Parser membaca seluruh dokumen, kemudian membangun struktur pohon residen memori, dan kode dapat mengoperasikan struktur pohon ini sesuai dengan antarmuka DOM.
Keuntungan: Seluruh dokumen dibaca ke dalam memori, nyaman untuk beroperasi: mendukung berbagai fungsi seperti modifikasi, penghapusan, dan reproduksi dan pengaturan.
Kerugian: Baca seluruh dokumen ke dalam memori, mempertahankan terlalu banyak node yang tidak perlu, membuang -buang memori dan ruang.
Gunakan kesempatan: Setelah dokumen dibaca, dokumen perlu dioperasikan beberapa kali, dan ketika sumber daya perangkat keras cukup (memori, CPU).
Untuk menyelesaikan masalah yang ada di dom parsing, penguraian saksofon terjadi. Karakteristiknya adalah:
Keuntungan: Tidak perlu mengimplementasikan seluruh dokumen, yang membutuhkan lebih sedikit sumber daya. Terutama di lingkungan tertanam, seperti Android, sangat disarankan untuk menggunakan penguraian saksofon.
Kerugian: Tidak seperti parsing dom, data tidak gigih. Jika data tidak disimpan setelah acara, data akan hilang.
Gunakan Acara: Mesin memiliki keterbatasan kinerja