Tutorial XSLT – Transformasi XSLT & Elemen Dengan Contoh

Tutorial Ini Menerangkan Apa itu XSLT, Transformasi, Elemen dan Penggunaannya dengan Contoh. Juga merangkumi Kepentingan XPath untuk Membangunkan Kod Penukaran XSLT:

Istilah “XSLT” dijana dengan menggabungkan dua perkataan iaitu 'XSL' dan 'T', 'XSL' ialah bentuk pendek ' Bahasa Lembaran Gaya Boleh Diperluas' dan 'T' ialah bentuk pendek 'Transformasi'.

Jadi, pada asasnya, XSLT ialah bahasa transformasi yang digunakan untuk mengubah/menukar dokumen XML sumber kepada dokumen XML atau kepada format lain seperti sebagai HTML, PDF dengan menggunakan XSL-FO (Memformat Objek), dsb.

Pengenalan Kepada XSLT

Transformasi berlaku dengan bantuan pemproses XSLT ( seperti Saxon, Xalan). Pemproses XSLT ini mengambil satu atau lebih dokumen XML sebagai sumber dengan satu fail XSLT yang mengandungi kod XSLT yang ditulis di dalamnya dan dokumen hasil/output akan dijana kemudian seperti yang ditunjukkan dalam rajah di bawah.

Pemproses XSLT menghuraikan dokumen XML sumber dengan menggunakan X-Path untuk menavigasi elemen sumber yang berbeza bermula dari elemen akar hingga penghujung dokumen.

Semua Yang Anda Perlu Tahu Mengenai X-Path

Transformasi XSLT

Untuk memulakan transformasi, kami memerlukan satu dokumen XML di mana kod XSLT akan dijalankan, Fail kod XSLT itu sendiri dan alat atau perisian yang mempunyai pemproses XSLT (Anda boleh menggunakan mana-mana versi percuma atau versi percubaan perisian untukdokumenkan elemen harga menjadi kosong secara tidak sengaja seperti dalam kod di bawah, maka pemprosesan harus dihentikan serta-merta sebaik sahaja pemproses menemui elemen harga kosong yang boleh dicapai dengan mudah dengan menggunakan xsl:message dalam keadaan ujian if seperti di bawah Kod XSLT.

Makluman penyahpepijat ditunjukkan oleh skrin standard aplikasi: Pemprosesan ditamatkan oleh xsl:message pada baris 21.

Input kod XML:

 SQL The Complete Reference James R. Groff McGraw-Hill  3rd 

Rujuk tangkapan skrin untuk kawasan yang diserlahkan:

Kod XSLT:

Books:-

Terminating: price element is empty.
Book IDBook NameAuthor NamePublisherPriceEdition

Rujuk tangkapan skrin untuk kawasan yang diserlahkan:

Hasil: Sila ambil perhatian bahawa sebaik sahaja penghurai menemui tanda harga kosong, ia segera menamatkan pemprosesan kerana teg penutup , dan tidak akan datang pada penghujung fail.

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition
5350192956XSLT Programmer's ReferenceMichael KayWrox$404th
3741122298Head First JavaKathy SierraO'reilly$191st

Rujuk tangkapan skrin untuk kawasan yang diserlahkan:

#19) &

elemen mentakrifkan parameter kepada templat jika ditakrifkan di dalam . Ia boleh ditakrifkan sama ada di dalam sebagai parameter global atau di dalam sebagai parameter setempat kepada templat itu.

Nilai dihantar/dibekalkan apabila templat dipanggil oleh atau .

ia menghantar nilai parameter yang ditakrifkan di dalam kepada templat. Atribut seperti @name mengandungi nama parameter yang sepatutnya sepadan dengan atribut @name bagi elemen tersebut. @Select atribut digunakan untuk menetapkannilai kepada parameter itu.

Untuk mengambil nilai parameter yang sama seperti tanda dolar berubah($) digunakan.

Kod XML Sumber:

   XSLT Programmer's Reference Michael Kay Wrox $40 4th   Head First Java Kathy Sierra O'reilly $19 1st   SQL The Complete Reference James R. Groff McGraw-Hill $45 3rd   

Kod XSLT:

List of Books Name :-

Book Name:

Rujuk tangkapan skrin untuk kawasan yang diserlahkan:

Output Keputusan:

List of Books Name :-

Book Name: XSLT Programmer's Reference

Book Name: Head First Java

Book Name: SQL The Complete Reference

#20)

is used to import another stylesheet module inside our current stylesheet. This helps in achieving a modular XSLT development approach.

After importing all the templates get available to use. The priority of the templates defined in the parent stylesheet(which is importing another stylesheet) is higher than the imported stylesheet (which is imported by the parent stylesheet).

If another stylesheet also has the same name template as defined inside the template that is importing then the foreign templates get overridden by your own template.

Attribute @href is used as the URI of the stylesheet that you want to import.

#21)

Same as the above xsl:import, also helps in achieving a modular XSLT development approach. All the templates included by have the same priority/precedence as the calling stylesheet. It is like you copy all the templates from another stylesheet to your own stylesheet.

Attribute @href is used as the URI of the stylesheet that you want to import.

#22)

This element is used to specify the result tree in the output file. It contains attributes like @method that can have values like ‘XML’, ‘HTML’, ‘XHTML’ and ‘text’ by default is ‘XML’.

@encoding specifies the character encoding that comes in the output file as shown in below example encoding=”UTF-16″, the default values for XML or XHTML could be either UTF-8 or UTF-16. @indent specifies the indentation of the XML or HTML output code, for XML the default value is ‘no’ and for HTML and XHTML the default value is yes.

#23)

This element is used for stripping(removing) non-significant whitespace for the listed source element inside the @element attribute and if we want to strip whitespace from all the elements then we can use ‘*’ inside @elements attribute.

#24)

This element is used to preserve white spaces for the listed source element inside the @element attribute and if we want to preserve whitespace from all the elements, then we can use ‘*’ inside @elements attribute.

Conclusion

Thus in this article, we have learned about XSLT, frequently used XSLT elements, their usage with example source and target/result code, conversion or transformation of the source element to the target element.

We also discussed the importance of XPath to develop XSLT conversion code. We have seen the XSL template declaration and template calling & passing parameters. We learned to declare global and local variables, their usage in the XSLT code, and how to call them.

We learnt about different branching or conditional XSLT elements like xsl:if, xsl:for-each, xsl:choose. We understood the difference between shallow copying and deep copying, sorting of nodes, debugging of XSLT code by using xsl:message, the difference between named templates and match templates, and output formatting by using xsl:output.

About the Author: Himanshu P. is an experienced professional in the field of Information Technology. He has worked with ITC MNCs on cross-business domains and multiple technologies. Himanshu’s favorite pastime is reading magazines and blogging.

tujuan pembelajaran).

#1) Kod XML

Di bawah ialah kod XML sumber yang akan digunakan kod XSLT.

Nama Fail: Books.xml

     XSLT Programmer's Reference Michael Kay Wrox $40 4th   Head First Java Kathy Sierra O'reilly $19 1st   SQL The Complete Reference James R. Groff McGraw-Hill $45 3rd   

#2) Kod XSLT

Di bawah ialah kod XSLT berdasarkan yang akan dijalankan pada Dokumen XML di atas.

Nama Fail: Books.xsl

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition

#3) Kod Hasil / Output

Kod di bawah akan dihasilkan selepas menggunakan kod XSLT pada dokumen XML di atas.

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition
5350192956XSLT Programmer's ReferenceMichael KayWrox$404th
3741122298Head First JavaKathy SierraO'reilly$191st
9987436700SQL The Complete ReferenceJames R. GroffMcGraw-Hill$453rd

# 4) Lihat Hasil / Output dalam Penyemak Imbas Web

Buku:

ID Buku Nama Buku Nama Pengarang Penerbit Harga Edisi
5350192956 Rujukan Pengaturcara XSLT Michael Kay Wrox $40 ke-4
3741122298 Kepala Java Pertama Kathy Sierra O'reilly $19 Pertama
9987436700 SQL Rujukan Lengkap James R. Groff McGraw-Hill $45 Ke-3

Elemen XSLT

Untuk memahami perkara di atas Kod XSLT dan fungsinya, kita perlu memahami elemen XSLT yang berbeza dan atributnya terlebih dahulu.

#1) ATAU

Setiap kod XSLT mesti bermula dengan elemen akar sama ada atau

Atribut:

  • @xmlns:xsl: Menyambungkan dokumen XSLT dengan standard XSLT.
  • @version: Mentakrifkan versi kod XSLT kepadapenghurai.

#2)

Pengisytiharan ini mentakrifkan satu set peraturan yang digunakan untuk memproses atau mengubah elemen input yang dipilih bagi dokumen sumber kepada peraturan elemen sasaran yang ditentukan bagi dokumen output .

Pada asasnya, dua jenis templat tersedia mengikut atributnya:

(i) Templat Dinamakan: Apabila xsl: elemen templat mengandungi atribut @name maka ini dipanggil Templat Dinamakan.

Templat bernama dipanggil oleh elemen xsl:call-template.

(ii) Templat Padanan: Elemen xsl:template mengandungi atribut @match yang mengandungi corak padanan atau XPath yang digunakan pada nod input.

Templat padanan dipanggil oleh elemen xsl:apply-template.

xsl :elemen templat mesti mempunyai sama ada@padanan atribut atau @nama atribut atau kedua-duanya. Elemen xsl:template yang tidak mempunyai atribut padanan mesti tidak mempunyai atribut mod dan tiada atribut keutamaan.

Mari kita tulis semula XSLT di atas(

a) Kod XSLT berdasarkan Templat Padankan dengan . Lihat di bawah kuning & kod ditukar yang diserlahkan kelabu, ia akan menghasilkan hasil output yang sama di atas.

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition

Rujuk tangkapan skrin untuk kawasan yang diserlahkan:

b) Kod XSLT berdasarkan Templat Dinamakan dengan . Lihat di bawah kuning & kod ditukar yang diserlahkan kelabu, ia akan menghasilkan hasil output yang sama di atas.

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition

Rujuk tangkapan skrin untuk diserlahkankawasan:

#3)

Pemproses akan mencari dan menggunakan semua templat yang mempunyai XPath yang ditakrifkan dalam atribut @select.

Atribut @mode juga digunakan jika kita ingin memberikan lebih daripada satu cara output dengan kandungan input yang sama.

#4)

Pemproses akan membuat panggilan kepada templat yang mempunyai nilai dalam atribut @name (diperlukan).

elemen digunakan untuk menghantar parameter kepada templat.

#5)

Berikan nilai rentetan/teks berkenaan ungkapan XPath yang ditakrifkan dalam atribut @select, seperti yang ditakrifkan dalam kod di atas.

Ini akan memberikan nilai nama buku.

#6) : Pengulangan

Ini akan memproses arahan untuk setiap set nod (xpath ditakrifkan dalam atribut @select (diperlukan)) dalam urutan yang diisih.

Kod di atas bermaksud untuk setiap set nod kedai/buku bermaksud:

/kedai/buku[1]

/kedai/buku[2 ]

/store/book[3]

juga boleh digunakan sebagai anak kepada xsl:for-each untuk mentakrifkan susunan pengisihan.

#7) : Pemprosesan Bersyarat

Arahan xsl:if hanya akan diproses jika nilai Boolean atribut @test akan menjadi benar jika tidak arahan itu tidak akan dinilai dan urutan kosong dikembalikan.

2">  Condition True: Count of books are more than two.  

Keputusan: Keadaan Benar: Bilangan buku adalah lebih daripada dua.

Di sini kiraan() ialah fungsi yang dipratakrifkan.

#8) :atribut diperlukan untuk penilaian XPath.
 

Keputusan: Ini akan menyalin semua nod dan atribut dokumen sumber secara rekursif ke dokumen output, iaitu ia akan mencipta salinan tepat daripada dokumen sumber.

 

Bermaksud salinan nod semasa dan atribut semasa.

#11)

Elemen ini digunakan untuk menulis ulasan kepada sasaran Hasilnya, sebarang kandungan teks yang menyebelahi teg ini akan dicetak sebagai output ulasan.

Ini akan dicetak kepada output sebagai nod ulasan.

Keputusan:

#12)

Ini akan menjana nod teks pada dokumen hasil, nilai di dalam xsl:text akan dicetak sebagai rentetan kepada output .

Ini ialah

baris teks.

Output:

Ini ialah

baris teks.

#13)

Ini akan menjana elemen pada dokumen hasil dengan nama yang disebut dalam atribut @namenya. Atribut nama ialah atribut yang diperlukan.

 

Hasil: 5350192956

#14)

Ini akan menjana atribut kepada elemen induknya dalam dokumen hasil. Nama atribut ditakrifkan oleh atribut nama dan nilai atribut dikira oleh XPath yang disebut dalam atribut pilih seperti yang diberikan dalam kod di bawah. Atribut nama ialah atribut yang diperlukan.

 

Keputusan:

#15)

Elemen ini akan mengisihnod yang dipilih mengikut urutan mengikut arah menaik atau menurun. Nod atau XPath diberikan melalui atribut @select dan arah pengisihan ditentukan oleh atribut @order.

Dalam kod di bawah kita akan mendapat semua senarai buku mengikut nama buku dalam susunan abjad.

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition

Rujuk tangkapan skrin ini untuk kawasan yang diserlahkan:

Keputusan: Senarai di bawah mengandungi nama buku dalam susunan abjad iaitu dalam tertib menaik.

Buku:

ID Buku Nama Buku Nama Pengarang Penerbit Harga Edisi
3741122298 Ketua Java Pertama Kathy Sierra O 'reilly $19 Pertama
9987436700 SQL Rujukan Lengkap James R. Groff McGraw-Hill $45 Ke-3
5350192956 Rujukan Pengaturcara XSLT Michael Kay Wrox $40 4th

#16)

Elemen ini mengisytiharkan pembolehubah yang mempunyai nilai di dalamnya. Pembolehubah boleh menjadi pembolehubah global atau pembolehubah tempatan. Nama pembolehubah ditakrifkan oleh atribut @name dan nilai yang akan dipegang oleh pembolehubah ini ditakrifkan oleh atribut @select.

Akses pembolehubah global adalah global iaitu pembolehubah boleh dipanggil dalam mana-mana elemen dan kekal boleh diaksesdalam lembaran gaya.

Untuk menentukan pembolehubah global, kita hanya perlu mengisytiharkan bahawa di sebelah elemen akar lembaran gaya seperti yang ditunjukkan dalam kod di bawah dalam warna kuning yang diserlahkan, pembolehubah 'Buku Kedua' ialah pembolehubah global dan ia memegang nama buku kedua.

Akses pembolehubah tempatan adalah setempat kepada elemen di mana ia ditakrifkan iaitu pembolehubah itu tidak boleh diakses di luar elemen di mana ia ditakrifkan seperti yang ditunjukkan dalam kod di bawah yang berwarna kelabu diserlahkan, pembolehubah 'buku pertama' ialah pembolehubah tempatan dan ia memegang nama buku pertama.

Untuk membuat panggilan sama ada pembolehubah global kepada pembolehubah tempatan simbol Dolar ($) digunakan sebelum nama pembolehubah, seperti ditunjukkan di bawah dalam warna kuning yang diserlahkan $ .

       First Book Name:    Second Book Name:     

Rujuk tangkapan skrin untuk kawasan yang diserlahkan:

Hasil:

Nama Buku Pertama: Rujukan Pengaturcara XSLT

Nama Buku Kedua: Head First Java

#17)

Elemen ini digunakan untuk mengisytiharkan kunci, untuk nilai corak yang sepadan dengan kunci tertentu itu.

Nama ialah pembekal kepada kunci itu dengan atribut @name(“ get-publisher “), yang kemudiannya digunakan di dalam fungsi key(). Atribut @match disediakan untuk mengindeks nod input oleh ungkapan XPath(“ book “), seperti dalam warna kuning di bawah yang diserlahkan @match digunakan untuk mengindeks pada semua buku yang tersedia di kedai.

Berkaitan denganAtribut @match, atribut @use digunakan, ia mengisytiharkan nod untuk mendapatkan nilai bagi kunci tersebut melalui ungkapan XPath(“penerbit”).

Sekarang, anggap jika kita memerlukan butiran buku yang diterbitkan hanya oleh penerbit 'Wrox' maka kita boleh mendapatkan nilai itu dengan mudah melalui elemen xsl:key dengan membuat pasangan nilai kunci.

key('get- publisher', 'Wrox') Key() mengambil dua parameter, pertama ialah nama kunci, yang dalam kes ini ialah 'get-publisher', kedua ialah nilai rentetan yang perlu dicari yang dalam kes kami ialah 'Wrox'.

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition

Rujuk tangkapan skrin untuk kawasan yang diserlahkan:

Keputusan:

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition
5350192956XSLT Programmer's ReferenceMichael KayWrox$404th

Hasil / Paparan HTML:

Buku:

ID Buku Nama Buku Nama Pengarang Penerbit Harga Edisi
5350192956 Rujukan Pengaturcara XSLT Michael Kay Wrox $40 4th

#18)

Elemen ini digunakan untuk tujuan nyahpepijat dalam pembangunan XSLT. Elemen memberikan outputnya kepada skrin output standard aplikasi.

Atribut @terminate digunakan dengan dua nilai sama ada 'ya' atau 'tidak', jika nilai ditetapkan kepada 'ya' maka penghurai ditamatkan serta-merta sebaik sahaja keadaan ujian berpuas hati untuk mesej dilaksanakan.

Untuk memahami perkara ini, katakan jika dalam input kitaPemprosesan syarat alternatif

xsl:choose mempunyai berbilang sebab untuk keadaan berbeza yang diuji di dalam atribut @test bagi elemen xsl:when, keadaan ujian yang menjadi kenyataan terlebih dahulu antara semua xsl:when, yang akan diproses pertama dan terdapat unsur xls: otherwise pilihan supaya jika tiada ujian syarat menjadi kenyataan maka xsl: otherwise ini akan dipertimbangkan.

  Condition True: Count of book is one.   Condition True: Count of book is two.   Condition True: Count of book is three.   No condition match.  

Keputusan: Keadaan Benar: Kiraan buku ialah tiga.

#9)

xsl:copy berfungsi pada item konteks iaitu jika itu adalah nod maka ia akan menyalin nod konteks ke nod yang baru dijana dan ini tidak akan menyalin kanak-kanak daripada nod konteks. Atas sebab ini, ini dipanggil salinan cetek. Tidak seperti xsl:copy-of element, xsl:copy tidak mempunyai atribut@select.

Dalam kod di bawah, item konteks disalin ke output & semua item kanak-kanak dipanggil & disalin oleh xsl:apply-template secara rekursif.

node()

Gulung ke atas