Saya perlu membaca file XML bertubuh kecil (paling banyak MB, UTF-8), mencari-cari berbagai elemen dan atribut, mungkin memodifikasi beberapa dan menulis XML kembali lagi ke disk (lebih disukai dengan format bagus, indentasi) .
Apa yang akan menjadi parser XML terbaik untuk kebutuhan saya? Ada banyak pilihan. Beberapa yang saya sadari adalah:
Dan tentu saja yang ada di JDK (Saya menggunakan Java 6). Saya akrab dengan Xerces tetapi merasa kikuk.
Rekomendasi?
Jawaban:
Jika kecepatan dan memori tidak ada masalah, dom4j adalah pilihan yang sangat bagus. Jika Anda membutuhkan kecepatan, menggunakan parser StAX seperti Woodstox adalah cara yang benar, tetapi Anda harus menulis lebih banyak kode untuk menyelesaikan sesuatu dan Anda harus terbiasa memproses XML dalam stream.
sumber
Saya pikir Anda tidak harus mempertimbangkan implementasi parser spesifik. API Java untuk Pemrosesan XML memungkinkan Anda menggunakan implementasi pengurai yang sesuai dengan cara standar. Kode harus jauh lebih portabel, dan ketika Anda menyadari bahwa parser tertentu sudah terlalu tua, Anda dapat menggantinya dengan yang lain tanpa mengubah baris kode Anda (jika Anda melakukannya dengan benar).
Pada dasarnya ada tiga cara penanganan XML dengan cara standar:
Lupakan API eksklusif seperti JDOM atau Apache (mis. Apache Xerces XMLSerializer ) karena akan mengikat Anda dengan implementasi spesifik yang dapat berkembang dalam waktu atau kehilangan kompatibilitas, yang akan membuat Anda mengubah kode Anda di masa mendatang ketika Anda ingin meningkatkan ke versi baru JDOM atau parser apa pun yang Anda gunakan. Jika Anda tetap menggunakan API standar Java (menggunakan pabrik dan antarmuka) kode Anda akan jauh lebih modular dan dapat dipelihara.
Tidak perlu untuk mengatakan bahwa semua (saya belum memeriksa semua, tapi saya hampir yakin) dari parser yang diusulkan mematuhi implementasi JAXP sehingga secara teknis Anda dapat menggunakan semua, tidak peduli yang mana.
sumber
Berikut ini adalah perbandingan yang bagus pada DOM, SAX, StAX & TrAX (Sumber: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )
Jenis API Tarik, streaming Push, streaming Di pohon memori Aturan XSLT
Kemudahan Penggunaan Tinggi Sedang Tinggi Sedang
Kemampuan XPath Tidak Tidak Ya Ya
CPU & Memori Bagus Bagus Bervariasi Bervariasi
Hanya Maju Ya Ya Tidak Tidak
Baca XML Ya Ya Ya Ya
Tulis XML Ya Tidak Ya Ya
CRUD Tidak Tidak Ya Tidak
sumber
XML Sederhana http://simple.sourceforge.net/ sangat mudah untuk objek de (serialisasi).
sumber
Selain SAX dan DOM ada parsing STaX tersedia menggunakan XMLStreamReader yang merupakan parser tarik xml.
sumber
Saya telah menemukan dom4j sebagai alat untuk bekerja dengan XML. Terutama dibandingkan dengan Xerces.
sumber
Saya tidak akan merekomendasikan hal ini karena Anda punya banyak "pemikiran" di aplikasi Anda, tetapi menggunakan XSLT bisa lebih baik (dan berpotensi lebih cepat dengan kompilasi XSLT-to-bytecode) daripada manipulasi Java.
sumber
Jika Anda tidak terlalu peduli dengan kinerja, saya penggemar berat Apache Digester, karena ini pada dasarnya memungkinkan Anda memetakan langsung dari XML ke Java Beans.
Jika tidak, Anda harus mengurai dulu, dan kemudian membangun objek Anda.
sumber