- Uvod u XSLT
- Books:-
- Books:-
- List of Books Name :-
- List of Books Name :-
- Conclusion
- Books:-
- Books:-
- Books:-
- Books:-
- Books:-
- Books:-
- Books:-
Ovaj vodič objašnjava što je XSLT, njegove transformacije, elemente i upotrebu s primjerima. Također pokriva važnost XPatha za razvoj koda za konverziju XSLT-a:
Pojam “XSLT” generiran je kombinacijom dviju riječi, tj. 'XSL' i 'T', 'XSL' je kratki oblik od ' Extensible Stylesheet Language' i 'T' je kratki oblik 'Transformation'.
Dakle, u osnovi, XSLT je transformacijski jezik koji se koristi za transformaciju/konvertiranje izvornih XML dokumenata u XML dokumente ili u druge formate kao kao HTML, PDF pomoću XSL-FO (Objekti oblikovanja), itd.
Uvod u XSLT
Transformacija se događa uz pomoć XSLT procesora ( poput Saxon, Xalan). Ovaj XSLT procesor uzima jedan ili više XML dokumenata kao izvor s jednom XSLT datotekom koja sadrži XSLT kod napisan u njoj, a rezultati/izlazni dokumenti će se generirati kasnije kao što je prikazano na donjem dijagramu.
XSLT procesor analizira izvorne XML dokumente koristeći X-Path za navigaciju preko različitih izvornih elemenata počevši od korijenskog elementa do kraja dokumenata.
Sve što trebate znati o X-Path
XSLT transformaciji
Za početak transformacije potreban nam je jedan XML dokument na kojem će se izvoditi XSLT kod, Sama datoteka XSLT koda i alat ili softver koji ima XSLT procesor (možete koristiti bilo koju besplatnu verziju ili probnu verziju softvera zadokumentu kada se element cijene slučajno isprazni kao u donjem kodu, tada bi se obrada trebala odmah zaustaviti čim procesor naiđe na prazan element cijene što se lako može postići upotrebom xsl:message unutar if test uvjeta kao u nastavku XSLT kod.
Upozorenje programa za ispravljanje pogrešaka prikazano je na standardnom ekranu aplikacije: Obrada prekinuta xsl:porukom u retku 21.
Unos XML koda:
SQL The Complete Reference James R. Groff McGraw-Hill 3rd
Pogledajte snimak zaslona za označeno područje:
XSLT kod:
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
Pogledajte snimak zaslona za označeno područje:
Rezultat: Imajte na umu da čim parser naiđe na praznu oznaku cijene, odmah prekida obradu zbog čega završne oznake od , i ne dolaze na kraj datoteke.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
5350192956 | XSLT Programmer's Reference | Michael Kay | Wrox | $40 | 4th |
3741122298 | Head First Java | Kathy Sierra | O'reilly | $19 | 1st |
Pogledajte snimak zaslona za označeno područje:
#19) & Element
definira parametar za predložak ako je definiran unutar . Može se definirati ili unutar kao globalni parametar ili unutar kao lokalni parametar tog predloška.
Vrijednost se prosljeđuje/dostavlja kada predložak pozove ili .
prosljeđuje vrijednost parametra definiranog unutar predlošku. Atribut poput @name sadrži naziv parametra koji bi trebao odgovarati @name atributu elementa. @Select atribut se koristi za postavljanjevrijednost tom parametru.
Za dohvaćanje vrijednosti parametra koristi se isto kao varijabla znak dolara ($).
Izvorni XML kod:
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
XSLT kod:
List of Books Name :-
Book Name:
Pogledajte snimak zaslona za označeno područje:
Izlaz rezultata:
u svrhu učenja).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.
#1) XML kod
Ispod je izvorni XML kod na kojem će se izvoditi XSLT kod.
Naziv datoteke: 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) XSLT kod
Ispod je XSLT kod temeljen na kojem će se izvoditi na gornjem XML dokumentu.
Naziv datoteke: Books.xsl
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
#3) Kod rezultata / izlaza
Kod u nastavku bit će proizveden nakon korištenja XSLT koda na gornjem XML dokumentu.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
5350192956 | XSLT Programmer's Reference | Michael Kay | Wrox | $40 | 4th |
3741122298 | Head First Java | Kathy Sierra | O'reilly | $19 | 1st |
9987436700 | SQL The Complete Reference | James R. Groff | McGraw-Hill | $45 | 3rd |
# 4) Pregledajte rezultat / izlaz u web pregledniku
Knjige:
ID knjige | Ime knjige | Ime autora | Izdavač | Cijena | Izdanje |
---|---|---|---|---|---|
5350192956 | XSLT programer's Reference | Michael Kay | Wrox | 40$ | 4th |
3741122298 | Head First Java | Kathy Sierra | O'reilly | $19 | 1st |
9987436700 | SQL The Complete Reference | James R. Groff | McGraw-Hill | $45 | 3rd |
XSLT elementi
Da biste razumjeli gore XSLT kod i njegov rad, prvo moramo razumjeti različite XSLT elemente i njihove atribute.
#1) ILI
Svaki XSLT kod mora započeti korijenskim elementom ili
Atributi:
- @xmlns:xsl: Povezuje XSLT dokument sa XSLT standardom.
- @version: Definira verziju XSLT koda zaparser.
#2)
Ova deklaracija definira skup pravila koja se primjenjuju na obradu ili transformaciju odabranog ulaznog elementa izvornog dokumenta u definirana ciljana pravila elementa izlaznih dokumenata .
U osnovi, dostupne su dvije vrste predložaka prema njihovim atributima:
(i) Imenovani predložak: Kada xsl: element predloška sadrži atribut @name, tada se to naziva Named Template.
Imenovani predlošci se pozivaju xsl:call-template elementom.
(ii) Predložak podudaranja: Element xsl:template sadrži atribut @match koji sadrži odgovarajući uzorak ili XPath primijenjen na ulaznim čvorovima.
Match predloške poziva element xsl:apply-template.
xsl :template element mora imati atribut @match ili atribut @name ili oboje. Element xsl:template koji nema atribut podudaranja ne smije imati atribut načina rada niti atribut prioriteta.
Napišimo ponovno gornji XSLT(
a) XSLT kod temeljen na predlošku podudaranja s . Vidi dolje žuti & sivo označen promijenjeni kod, proizvest će isti gornji izlazni rezultat.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|
Pogledajte snimak zaslona za označeno područje:
b) XSLT kod temeljen na imenovanom predlošku s . Vidi dolje žuti & sivo označen promijenjeni kod, proizvest će isti gornji izlazni rezultat.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|
Pogledajte snimku zaslona za označenopodručje:
#3)
Procesor će pronaći i primijeniti sve predloške koji imaju XPath definiran u atributu @select.
Atribut @mode također se koristi ako želimo dati više od jednog načina izlaza s istim ulaznim sadržajem.
#4)
Procesor će pozvati predloške koji imaju vrijednost unutar atributa @name (obavezno).
element se koristi za prosljeđivanje parametara predlošku.
#5)
Navedite vrijednost niza/teksta u vezi s XPath izrazom definiranim u atributu @select, kako je definirano u gornjem kodu.
Ovo će dati vrijednost naziv knjige.
#6) : Ponavljanje
Ovo će obraditi upute za svaki skup čvorova (xpath definiran u atributu @select (obavezno)) u sortiranom nizu.
Gornji kod znači za svaki čvor skup trgovina/knjiga znači:
/trgovina/knjiga[1]
/trgovina/knjiga[2 ]
/store/book[3]
može se također koristiti kao dijete xsl:for-each za definiranje redoslijeda sortiranja.
#7) : Uvjetna obrada
Instrukcije xsl:if obradit će se samo ako je Booleova vrijednost atributa @test istinita, inače se instrukcija neće procijeniti i vraća se prazan niz.
2"> Condition True: Count of books are more than two.
Rezultat: Uvjet je istinit: Broj knjiga je veći od dvije.
Ovdje je count() unaprijed definirana funkcija.
#8) :atribut je potreban za procjenu XPatha.
Rezultat: Ovo će kopirati sve čvorove i atribute izvornog dokumenta rekurzivno u izlazni dokument, tj. stvorit će točnu kopiju izvornog dokumenta.
Označava kopiju trenutnog čvora i trenutnog atributa.
#11)
Ovaj element se koristi za pisanje komentara na cilj rezultat, svaki tekstualni sadržaj koji se nalazi uz ovu oznaku bit će ispisan kao komentirani izlaz.
Ovo će se ispisati kao izlaz kao čvor komentara.
Rezultat:
#12)
Ovo će generirati tekstualni čvor za dokument rezultata, vrijednost unutar xsl:text bit će ispisana kao niz za izlaz .
Ovo je
redak teksta.
Izlaz:
Ovo je
tekstualni redak.
#13)
Ovo će generirati element za dokument rezultata s ime navedeno u atributu @name. Atribut imena je obavezan atribut.
Rezultat: 5350192956
#14)
Ovo će generirati atribut svom nadređenom elementu u dokumentu rezultata. Naziv atributa definiran je atributom name, a vrijednost atributa izračunava XPath spomenut u atributu odabira kako je navedeno u donjem kodu. Atribut imena je potreban atribut.
Rezultat:
#15)
Ovaj element će sortiratiodabrani čvor u slijedu prema tome u uzlaznom ili silaznom smjeru. Čvor ili XPath dan je kroz atribut @select, a smjer sortiranja definiran je atributom @order.
U donjem kodu dobit ćemo popis svih knjiga prema nazivu knjige abecednim redom.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
Pogledajte ovu snimku zaslona za istaknuto područje:
Rezultat: Donji popis sadrži nazive knjiga abecednim redoslijedom, tj. uzlaznim redoslijedom.
Knjige:
ID knjige | Ime knjige | Ime autora | Izdavač | Cijena | Izdanje |
---|---|---|---|---|---|
3741122298 | Head First Java | Kathy Sierra | O 'reilly | $19 | 1st |
9987436700 | SQL Kompletna referenca | James R. Groff | McGraw-Hill | $45 | 3rd |
5350192956 | XSLT programer's Reference | Michael Kay | Wrox | $40 | 4. |
#16)
Ovaj element izjavljuje varijabla koja u sebi sadrži vrijednost. Varijabla može biti globalna varijabla ili lokalna varijabla. Naziv varijable definiran je atributom @name, a vrijednost koju će ova varijabla držati definirana je atributom @select.
Pristup globalne varijable je globalan, tj. varijable se mogu pozvati unutar bilo kojeg element i ostaju dostupniunutar stilske tablice.
Da bismo definirali globalnu varijablu, samo trebamo deklarirati da pored korijenskog elementa stilske tablice kao što je prikazano u donjem kodu označenom žutom bojom, varijabla 'SecondBook' je globalna varijabla i sadrži naziv druge knjige.
Pristup lokalne varijable je lokalan elementu u kojem je definirana, tj. ta varijabla ne bi bila dostupna izvan elementa u kojem je definirana kao što je prikazano u u donjem kodu koji je sivo označen, varijabla 'prva knjiga' je lokalna varijabla i sadrži naziv prve knjige.
Da biste uputili poziv bilo globalnoj varijabli lokalnoj varijabli simbol dolara ($) koristi se prije naziva varijable, kao što je dolje prikazano u žuto istaknutom $ .
First Book Name: Second Book Name:
Pogledajte snimak zaslona za označeno područje:
Rezultat:
Naziv prve knjige: XSLT programer's Reference
Naziv druge knjige: Head First Java
#17)
Ovaj element se koristi za deklariranje ključeva, za odgovarajuće vrijednosti uzorka za taj određeni ključ.
Name je pružatelj tog ključa pomoću @name atributa(“ get-publisher “), koji se kasnije koristi unutar funkcije key(). @match atribut je osiguran za indeksiranje ulaznog čvora putem XPath izraza (“ knjiga “), kao u donjem žuto istaknutom @match se koristi za indeksiranje svih knjiga dostupnih u trgovini.
U odnosu na@match atribut, @use atribut se koristi, deklarira čvor za dobivanje vrijednosti za taj ključ kroz XPath izraz (“publisher”).
Sada, pretpostavimo da trebaju nam pojedinosti o knjizi koju je objavio samo izdavač 'Wrox', tada tu vrijednost možemo lako dobiti putem elementa xsl:key tako da napravimo par ključ-vrijednost.
key('get- publisher', 'Wrox') Key() uzima dva parametra, prvi je naziv ključa, koji je u ovom slučaju 'get-publisher', drugi je vrijednost niza koju treba pretražiti, što je u našem slučaju 'Wrox'.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
Pogledajte snimak zaslona za istaknuto područje:
Rezultat:
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
5350192956 | XSLT Programmer's Reference | Michael Kay | Wrox | $40 | 4th |
Rezultat / HTML prikaz:
Knjige:
ID knjige | Ime knjige | Ime autora | Izdavač | Cijena | Izdanje |
---|---|---|---|---|---|
5350192956 | XSLT programer's Reference | Michael Kay | Wrox | $40 | 4th |
#18)
Ovaj element se koristi za otklanjanje pogrešaka u XSLT razvoj. Element daje svoj izlaz standardnom izlaznom ekranu aplikacije.
Atribut @terminate koristi se s dvije vrijednosti ili 'yes' ili 'no', ako je vrijednost postavljena na 'yes' tada parser prekida odmah čim se zadovolji testni uvjet da bi se poruka izvršila.
Da bismo ovo razumjeli, pretpostavimo da je u našem unosuObrada alternativnog uvjeta
xsl:choose ima više uzroka za različite uvjete koji se testiraju unutar atributa @test elemenata xsl:when, testnog uvjeta koji se ostvaruje prvi među svim xsl:when koji će se obraditi prvi i postoji izborni element xls:otherwise tako da ako se nijedan od testova uvjeta ne ispuni, onda će se uzeti u obzir ovaj xsl:otherwise.
Condition True: Count of book is one. Condition True: Count of book is two. Condition True: Count of book is three. No condition match.
Rezultat: Uvjet True: Broj knjiga je tri.
#9)
xsl:copy radi na stavci konteksta, tj. ako je to čvor, kopirat će čvor konteksta u novogenerirani čvor i to neće kopirati potomke kontekstnog čvora. Zbog toga se ovo zove plitka kopija. Za razliku od elementa xsl:copy-of, xsl:copy nema atribut @select.
U donjem kodu, stavke konteksta se kopiraju u output & sve podređene stavke nazivaju se & rekurzivno kopira xsl:apply-template.
node()