Penggabungan XML menjadi mudah

Kadang-kadang nampaknya anda menghabiskan lebih banyak masa untuk memanipulasi fail XML daripada menulis kod Java, jadi masuk akal untuk memiliki satu atau dua wrangler XML di kotak alat anda. Dalam artikel ini, Laurent Bovet memulai anda dengan XmlMerge, alat sumber terbuka yang membolehkan anda menggunakan deklarasi XPath untuk menggabungkan dan memanipulasi data XML dari sumber yang berbeza.

Sebagai pembangun Java, anda menggunakan XML setiap hari dalam skrip binaan, penerangan penyebaran, fail konfigurasi, fail pemetaan objek-objek dan banyak lagi. Membuat semua fail XML ini boleh membosankan, tetapi tidak begitu mencabar. Memanipulasi atau bergabungdata yang terkandung dalam fail yang berbeza itu, bagaimanapun, dapat menjadi sukar dan memakan masa. Anda mungkin lebih suka menggunakan beberapa fail yang dibahagikan kepada modul yang berbeza, tetapi anda hanya terhad kepada satu fail besar kerana itu adalah satu-satunya format yang dapat difahami oleh pengguna XML. Anda mungkin ingin menimpa elemen tertentu dalam fail besar, tetapi sebaliknya, ganti keseluruhan isi fail tersebut. Mungkin anda kekurangan masa untuk membuat transformasi XSL (XSLT) yang akan memudahkan manipulasi elemen XML dalam dokumen anda. Walau apa pun keadaannya, nampaknya tidak ada yang semudah yang diperlukan ketika menyatukan elemen dalam fail XML anda.

Dalam artikel ini, saya menyajikan alat sumber terbuka yang saya buat untuk menyelesaikan banyak masalah umum yang berkaitan dengan penggabungan dan manipulasi data dari dokumen XML yang berbeza. EL4J XmlMerge adalah perpustakaan Java di bawah lesen LGPL yang memudahkan penggabungan elemen dari sumber XML yang berbeza. Walaupun XmlMerge adalah sebahagian daripada kerangka EL4J, anda boleh menggunakannya secara bebas daripada EL4J. Yang anda perlukan untuk menjalankan utiliti XmlMerge dari baris arahan anda ialah JDK 1.5 atau lebih tinggi.

Dalam perbincangan yang berikut, anda akan belajar bagaimana menggunakan XmlMerge untuk pelbagai senario penggabungan XML biasa, termasuk menggabungkan dua fail XML, menggabungkan data fail XML dari sumber yang berlainan untuk membuat Resourcekacang musim bunga pada waktu runtime dan menggabungkan XmlMerge dan Semut untuk membuat penerangan penggunaan automatik pada masa membina. Saya juga akan menunjukkan kepada anda bagaimana menggunakan deklarasi XPath dan tindakan dan pencocokan bawaan untuk menentukan perlakuan elemen tertentu semasa penggabungan XML. Saya akan menyimpulkan dengan melihat algoritma penggabungan mudah XmlMerge dan mencadangkan cara ia dapat diperluas untuk operasi penggabungan XML yang lebih khusus.

Anda boleh memuat turun XmlMerge sekarang jika anda mahu mengikuti contohnya.

Menggabungkan fail XML

Dalam Penyenaraian 1 anda melihat contoh dua fail XML yang sangat biasa (dan sangat disederhanakan) yang perlu digabungkan.

Penyenaraian 1. Dua fail XML yang perlu digabungkan

Fail1.xml Fail2.xml

Penyenaraian 2 menunjukkan input baris perintah untuk menggabungkan dua fail ini menggunakan utiliti XmlMerge, diikuti oleh output yang dihasilkan.

Penyenaraian 2. Kedua-dua fail XML digabungkan menggunakan XmlMerge

~ $ java -jar xmlmerge-full.jar file1.xml file2.xml         ~ $

Contoh penggabungan pertama ini sangat mudah, tetapi anda mungkin menyedari bahawa urutan penyatuan fail itu penting. Sekiranya anda menukar pesanan, anda boleh mendapatkan hasil yang berbeza. (Kemudian dalam artikel anda akan melihat satu contoh apa yang berlaku apabila anda menukar perintah dua fail untuk digabungkan.) Untuk menyimpan fail dalam perintah, XmlMerge menggunakan istilah asal bagi dokumen pertama dan patch untuk yang kedua. Ini mudah diingat kerana dokumen tampalan selalu digabungkan menjadi yang asli.

Menggabungkan fail XML dari sumber yang berbeza

Anda boleh melaksanakan utiliti XmlMerge di mana sahaja dalam kod Java anda dan menggunakannya untuk menggabungkan data dari sumber yang berlainan ke dalam dokumen baru yang berguna. Dalam Penyenaraian 3, saya menggunakannya untuk menggabungkan fail dari sistem fail aplikasi saya dan isi permintaan servlet menjadi model objek dokumen tunggal (DOM).

Penyenaraian 3. Menggabungkan XML pelanggan dan pelayan menjadi DOM

XmlMerge xmlMerge = new DefaultXmlMerge(); org.w3c.dom.Document doc = documentBuilder.parse( xmlMerge.merge( new FileInputStream("file1.xml"), servletRequest.getInputStream()));

Membuat sumber Spring Framework pada waktu runtime

Dalam beberapa kes, berguna untuk menggabungkan XmlMerge dan Spring Framework. Sebagai contoh, Resourcekacang musim bunga yang ditunjukkan dalam Penyenaraian 4 dibuat pada waktu runtime dengan menggabungkan fail XML yang terpisah ke dalam aliran XML tunggal. Anda kemudian boleh menggunakan Resourcekacang untuk mengkonfigurasi sumber lain untuk pemetaan hubungan objek, penghasilan dokumen dan banyak lagi.

Penyenaraian 4. Kacang Sumber Musim Bunga

     ch/elca/el4j/tests/xmlmerge/r1.xml     ch/elca/el4j/tests/xmlmerge/r2.xml            

Menghasilkan deskriptor penyebaran automatik pada masa membina

Anda mungkin pernah menggunakan Semut untuk mengautomasikan bangunan anda. Bagaimana dengan menggabungkannya dengan XmlMerge untuk menghasilkan deskriptor penyebaran XML pada masa membina? Penyenaraian 5 menunjukkan tempat XmlMergeTaskkerja.

Penyenaraian 5. XmlMergeTask menghasilkan penerangan penerapan