Penggabungan XML menjadi mudah

Terkadang sepertinya Anda menghabiskan lebih banyak waktu untuk memanipulasi file XML daripada menulis kode Java, jadi masuk akal untuk memiliki satu atau dua pengatur XML di kotak alat Anda. Di artikel ini, Laurent Bovet membantu Anda memulai dengan XmlMerge, alat open source yang memungkinkan Anda menggunakan deklarasi XPath untuk menggabungkan dan memanipulasi data XML dari sumber yang berbeda.

Sebagai developer Java, Anda menggunakan XML setiap hari dalam skrip build, deskriptor penerapan, file konfigurasi, file pemetaan relasional objek, dan lainnya. Membuat semua file XML ini bisa membosankan, tetapi tidak terlalu menantang. Memanipulasi atau menggabungkandata yang terkandung dalam file yang berbeda tersebut, bagaimanapun, bisa jadi sulit dan memakan waktu. Anda mungkin lebih suka menggunakan beberapa file yang dibagi ke dalam modul yang berbeda, tetapi mendapati diri Anda terbatas pada satu file besar karena itulah satu-satunya format XML yang dapat dipahami konsumen. Anda mungkin ingin mengganti elemen tertentu dalam file besar, tetapi temukan diri Anda mereplikasi seluruh konten file sebagai gantinya. Mungkin Anda kekurangan waktu untuk membuat transformasi XSL (XSLT) yang akan mempermudah manipulasi elemen XML dalam dokumen Anda. Apa pun masalahnya, tampaknya tidak ada yang semudah yang seharusnya saat menggabungkan elemen dalam file XML Anda.

Pada artikel ini, saya menyajikan alat sumber terbuka yang saya buat untuk menyelesaikan banyak masalah umum yang terkait dengan penggabungan dan manipulasi data dari dokumen XML yang berbeda. EL4J XmlMerge adalah pustaka Java di bawah lisensi LGPL yang mempermudah penggabungan elemen dari berbagai sumber XML. Meskipun XmlMerge adalah bagian dari kerangka kerja EL4J, Anda dapat menggunakannya secara terpisah dari EL4J. Yang Anda butuhkan untuk menjalankan utilitas XmlMerge dari baris perintah Anda adalah JDK 1.5 atau lebih tinggi.

Dalam pembahasan selanjutnya, Anda akan belajar bagaimana menggunakan XmlMerge untuk berbagai skenario penggabungan XML yang umum, termasuk menggabungkan dua file XML, menggabungkan data file XML dari sumber yang berbeda untuk membuat Resourcekacang Spring saat runtime dan menggabungkan XmlMerge dan Ant untuk membuat sebuah deskriptor penerapan otomatis pada waktu pembuatan. Saya juga akan menunjukkan kepada Anda bagaimana menggunakan deklarasi XPath dan built-in actions and matcher untuk menentukan perlakuan elemen tertentu selama penggabungan XML. Saya akan menyimpulkan dengan melihat algoritma penggabungan sederhana XmlMerge dan menyarankan cara-cara itu dapat diperpanjang untuk operasi penggabungan XML yang lebih khusus.

Anda dapat mengunduh XmlMerge sekarang jika Anda ingin mengikuti contoh-contohnya.

Menggabungkan file XML

Dalam Daftar 1 Anda melihat contoh yang sangat umum (dan sangat disederhanakan) dari dua file XML yang perlu digabungkan.

Daftar 1. Dua file XML yang perlu digabungkan

File1.xml File2.xml

Kode 2 menunjukkan masukan baris perintah untuk menggabungkan dua file ini menggunakan utilitas XmlMerge, diikuti dengan keluaran yang dihasilkan.

Kode 2. Dua file XML digabungkan menggunakan XmlMerge

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

Contoh penggabungan pertama ini sangat sederhana, tetapi Anda mungkin memperhatikan bahwa urutan penggabungan file itu penting. Jika Anda mengganti urutannya, Anda bisa mendapatkan hasil yang berbeda. (Nanti di artikel ini Anda akan melihat contoh dari apa yang terjadi ketika Anda mengganti urutan dua file yang akan digabungkan.) Untuk menjaga agar file tetap teratur, XmlMerge menggunakan istilah asli untuk dokumen pertama dan tambalan untuk yang kedua. Ini mudah diingat karena dokumen tambalan selalu digabungkan ke aslinya.

Menggabungkan file XML dari sumber yang berbeda

Anda dapat mengimplementasikan utilitas XmlMerge di mana saja dalam kode Java Anda dan menggunakannya untuk menggabungkan data dari sumber yang berbeda menjadi dokumen baru yang berguna. Dalam Kode 3, saya telah menggunakannya untuk menggabungkan file dari sistem file aplikasi saya dan isi permintaan servlet ke dalam satu model objek dokumen (DOM).

Kode 3. Menggabungkan XML klien dan server ke dalam DOM

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

Membuat sumber daya Spring Framework saat runtime

Dalam beberapa kasus berguna untuk menggabungkan XmlMerge dan Spring Framework. Misalnya, Spring Resourcebean yang ditunjukkan pada Listing 4 dibuat saat runtime dengan menggabungkan file XML yang terpisah ke dalam aliran XML tunggal. Anda kemudian dapat menggunakan Resourcekacang untuk mengkonfigurasi sumber daya lain untuk pemetaan relasional objek, pembuatan dokumen, dan lainnya.

Daftar 4. Kacang Sumber Daya Musim Semi

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

Menghasilkan deskriptor penerapan otomatis pada waktu pembuatan

Anda mungkin telah menggunakan Ant untuk mengotomatiskan build Anda. Bagaimana jika menggabungkannya dengan XmlMerge untuk menghasilkan deskriptor penerapan XML pada waktu pembuatan? Kode 5 menunjukkan XmlMergeTaskdi tempat kerja.

Kode 5. XmlMergeTask menghasilkan deskriptor penerapan