- 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 uz primjer. Također pokriva važnost XPath-a za razvoj XSLT konverzijskog koda:
Izraz “XSLT” je generiran kombinacijom dvije riječi, tj. 'XSL' i 'T', 'XSL' je kratki oblik ' Extensible Stylesheet Language' i 'T' su kratki oblik 'Transformacije'.
Dakle, u osnovi, XSLT je jezik transformacije koji se koristi za transformaciju/konvertiranje izvornih XML dokumenata u XML dokumente ili u druge formate kao što su kao HTML, PDF pomoću XSL-FO (Objekti za formatiranje) itd.
Uvod u XSLT
Transformacija se dešava uz pomoć XSLT procesora ( kao Saxon, Xalan). Ovaj XSLT procesor uzima jedan ili više XML dokumenata kao izvor sa jednom XSLT datotekom koja sadrži XSLT kod napisan u njemu i dokumenti rezultata/izlaza će biti generisani kasnije kao što je prikazano na donjem dijagramu.
XSLT procesor analizira izvorne XML dokumente koristeći X-Path za navigaciju kroz različite izvorne elemente 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 zadokumentirajte da se element cijene slučajno isprazni kao u kodu ispod, tada bi se obrada trebala odmah zaustaviti čim procesor naiđe na prazan element cijene što se može lako postići korištenjem xsl:message unutar if test uvjeta kao u nastavku XSLT kod.
Upozorenje za otklanjanje grešaka prikazano je na standardnom ekranu aplikacije: Obrada je prekinuta sa xsl:porukom u redu 21.
Unesite XML kod:
SQL The Complete Reference James R. Groff McGraw-Hill 3rd
Pogledajte snimak ekrana za označenu oblast:
XSLT kod:
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
Pogledajte snimak ekrana za označeno područje:
Rezultat: Imajte na umu da čim parser naiđe na praznu oznaku cijene, odmah prekida obradu zbog koje se zatvaraju oznake , i ne bi dolazile 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 ekrana za označeno područje:
#19) &
element definira parametar predloška ako je definiran unutar . Može se definirati iznutra kao globalni parametar ili iznutra kao lokalni parametar tog predloška.
Vrijednost se prosljeđuje/isporučuje kada predložak pozove ili .
prosljeđuje vrijednost parametra definiranog unutar šablonu. Atribut poput @name sadrži naziv parametra koji bi trebao odgovarati @name atributu elementa. @Select atribut se koristi za postavljanjevrijednost tog parametra.
Za dohvaćanje vrijednosti parametra koristi se isti kao promjenjivi 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 ekrana za označeno područje:
Izlaz rezultata:
svrhe 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
U nastavku je XSLT kod na osnovu kojeg će se izvoditi na gore navedenom XML dokumentu.
Naziv datoteke: Books.xsl
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
#3) Kod rezultata / izlaza
Kôd ispod će biti proizveden nakon upotrebe 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 pretraživaču
Knjige:
ID knjige | Naziv knjige | Ime autora | Izdavač | Cijena | Izdanje |
---|---|---|---|---|---|
5350192956 | Referenca XSLT programera | Michael Kay | Wrox | $40 | 4. |
3741122298 | Na čelu prve Java | Kathy Sierra | O'reilly | $19 | 1st |
9987436700 | SQL Kompletna referenca | James R. Groff | McGraw-Hill | $45 | 3rd |
XSLT elementi
Da biste razumjeli gore navedeno XSLT kod i njegov rad, prvo moramo razumjeti različite XSLT elemente i njihove atribute.
#1) ILI
Svaki XSLT kod mora početi s korijenskim elementom ili ili
Atributi:
- @xmlns:xsl: Povezuje XSLT dokument sa XSLT standardom.
- @version: Definira verziju XSLT koda zaparser.
#2)
Ova deklaracija definira skup pravila primijenjenih za obradu ili transformaciju odabranog ulaznog elementa izvornog dokumenta u definirana pravila ciljnog elementa izlaznih dokumenata .
U osnovi, dvije vrste predložaka su dostupne prema njihovim atributima:
(i) Imenovani predložak: Kada je element xsl: šablona sadrži atribut @name, onda se ovo zove Imenovani predložak.
Nazvani šabloni se pozivaju pomoću xsl:call-template elementa.
(ii) Predložak podudaranja: Element xsl:template sadrži atribut @match koji sadrži odgovarajući uzorak ili XPath primijenjen na ulaznim čvorovima.
Match šablone poziva xsl:apply-template element.
xsl :template element mora imati atribut @match ili @name ili oboje. Element xsl:template koji nema atribut podudaranja ne smije imati atribut načina rada i prioritet.
Ponovo napišimo gornji XSLT(
a) XSLT kod zasnovan na predlošku podudaranja sa . Pogledajte ispod žuti & sivo označen promijenjen kod, dat će isti gornji izlazni rezultat.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|
Pogledajte snimak ekrana za označenu oblast:
b) XSLT kod baziran na Imenovanom predlošku sa . Pogledajte ispod žuti & sivo označen promijenjen kod, dat će isti gornji izlazni rezultat.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|
Pogledajte snimku ekrana za istaknutioblast:
#3)
Procesor će pronaći i primeniti sve šablone koji imaju XPath definisan u atributu @select.
Atribut @mode se također koristi ako želimo dati više od jednog načina izlaza sa istim ulaznim sadržajem.
#4)
Procesor će pozvati šablone koji imaju vrijednost unutar atributa @name (obavezno).
element se koristi za prosljeđivanje parametara šablonu.
#5)
Navedite vrijednost stringa/teksta u vezi sa XPath izrazom definiranim u @select atributu, kako je definirano u gornjem kodu.
Ovo će dati vrijednost ime knjige.
#6) : Ponavljanje
Ovo će obraditi instrukcije za svaki skup čvorova (xpath definisan u @select (potreban) atribut) u sortiranom nizu.
Gorenji kod znači za svaki skup čvorova store/book znači:
/store/book[1]
/store/book[2 ]
/store/book[3]
također se može koristiti kao dijete xsl:for-each za definiranje redoslijeda sortiranja.
#7) : Uslovna obrada
Instrukcije xsl:if će se obraditi samo ako će Booleova vrijednost atributa @test biti istinita, inače instrukcija neće biti procijenjena i prazna sekvenca se vraća.
2"> Condition True: Count of books are more than two.
Rezultat: Uvjet Tačan: Broj knjiga je veći od dvije.
Ovdje je count() unaprijed definirana funkcija.
#8) :atribut je potreban za procjenu XPath-a.
Rezultat: Ovo će kopirati sve čvorove i atribute izvornog dokumenta rekurzivno u izlazni dokument, tj. kreirat će tačnu kopiju izvornog dokumenta.
Označava kopiju trenutnog čvora i trenutnog atributa.
#11)
Ovaj element se koristi za pisanje komentara na cilj rezultat, bilo koji tekstualni sadržaj koji se nalazi uz ovu oznaku bit će odštampan kao komentarisani izlaz.
Ovo će biti ispisano za izlaz kao čvor komentara.
Rezultat:
#12)
Ovo će generirati tekstualni čvor u dokumentu rezultata, vrijednost unutar xsl:text će se ispisati kao string za izlaz .
Ovo je
redak teksta.
Izlaz:
Ovo je
tekstualni red.
#13)
Ovo će generirati element u dokumentu rezultata sa ime navedeno u njegovom atributu @name. Atribut imena je obavezan atribut.
Rezultat: 5350192956
#14)
Ovo će generirati atribut njegovom roditeljskom elementu u dokumentu rezultata. Ime atributa je definirano atributom name, a vrijednost atributa se izračunava pomoću XPath-a koji se spominje u atributu odabira kao što je dato u kodu ispod. Atribut name je obavezan atribut.
Rezultat:
#15)
Ovaj element će sortiratiodabrani čvor u nizu u skladu s tim u uzlaznom ili silaznom smjeru. Čvor ili XPath se daje preko @select atributa, a smjer sortiranja je definiran atributom @order.
U donjem kodu ćemo dobiti listu svih knjiga prema nazivu knjige abecednim redom.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
Pogledajte ovaj snimak ekrana za označeno područje:
Rezultat: Donja lista sadrži nazive knjiga abecednim redom tj. rastućim redom.
Knjige:
ID knjige | Naziv knjige | Ime autora | Izdavač | Cijena | Izdanje |
---|---|---|---|---|---|
3741122298 | Prva glava Java | Kathy Sierra | O 'reilly | $19 | 1st |
9987436700 | SQL Kompletna referenca | James R. Groff | McGraw-Hill | $45 | 3rd |
5350192956 | Referenca XSLT programera | Michael Kay | Wrox | $40 | 4. |
#16)
Ovaj element deklarira varijabla koja u sebi sadrži vrijednost. Varijabla može biti globalna ili lokalna varijabla. Ime varijable je definirano atributom @name, a vrijednost koju će ova varijabla držati definirana je atributom @select.
Pristup globalnoj varijable je globalni, tj. varijable se mogu pozvati unutar bilo kojeg element i ostaju dostupniunutar stylesheet-a.
Da bismo definirali globalnu varijablu, samo trebamo deklarirati da je pored korijenskog elementa stylesheet-a kao što je prikazano u donjem kodu u žuto označenom, varijabla 'SecondBook' globalna varijabla i sadrži ime druge knjige.
Pristup lokalne varijable je lokalni elementu u kojem je definirana, tj. ta varijabla ne bi bila dostupna izvan elementa u kojem je definirana kao što je prikazano u kod ispod koji je označen sivo, varijabla 'first book' je lokalna varijabla i sadrži ime prve knjige.
Da biste pozvali bilo koju globalnu varijablu u lokalnu varijablu, simbol dolara ($) se koristi ispred imena varijable, kao što je prikazano ispod žuto označeno $ .
First Book Name: Second Book Name:
Pogledajte snimak ekrana za označeno područje:
Rezultat:
Naziv prve knjige: Referenca XSLT programera
Naziv druge knjige: Head First Java
#17)
Ovaj element se koristi za deklariranje ključeva, za podudaranje vrijednosti uzorka s tim određenim ključem.
Ime je dobavljač tog ključa pomoću atributa @name(“ get-publisher “), koji se kasnije koristi unutar funkcije key(). @match atribut se obezbjeđuje za indeksni ulazni čvor pomoću XPath izraza(“ book “), kao na donjem žuto označenom @match se koristi za indeksiranje svih knjiga dostupnih u prodavnici.
U odnosu na@match atribut, koristi se atribut @use, deklarira čvor da dobije vrijednost za taj ključ putem XPath izraza(“publisher”).
Sad, pretpostavimo da je potrebni su nam detalji knjige koju je objavio samo 'Wrox' izdavač onda možemo lako dobiti tu vrijednost kroz xsl:key element tako što ćemo napraviti par ključ-vrijednost.
key('get- publisher', 'Wrox') Key() uzima dva parametra, prvi je ime ključa, koji je u ovom slučaju 'get-publisher', drugi je vrijednost stringa koju treba pretraživati što je u našem slučaju 'Wrox'.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
Pogledajte snimak ekrana za označeno 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 | Naziv knjige | Ime autora | Izdavač | Cijena | Izdanje |
---|---|---|---|---|---|
5350192956 | Referenca XSLT programera | Michael Kay | Wrox | $40 | 4th |
#18)
Ovaj element se koristi u svrhu otklanjanja grešaka u XSLT razvoj. Element daje svoj izlaz na standardni izlazni ekran aplikacije.
Atribut @terminate se koristi sa dvije vrijednosti ili 'yes' ili 'no', ako je vrijednost postavljena na 'yes' tada parser završava se odmah čim se testni uslov ispuni da bi se poruka izvršila.
Da bismo ovo razumjeli, pretpostavimo da je u našem unosuAlternativne obrade uvjeta
xsl:choose imaju više uzroka za različite uvjete koji se testiraju unutar @test atributa xsl:when elemenata, testni uvjet koji se prvi ostvaruje među svim xsl:when, koji će biti obrađen prvi i postoji opcioni element xls:otherwise tako da ako se nijedan od testova uslova 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 Tačan: Broj knjiga je tri.
#9)
xsl:copy radi na kontekstualnoj stavci, tj. ako je to čvor onda će kopirati kontekstni čvor u novogenerirani čvor i to neće kopirati djecu kontekstnog čvora. Zbog toga se ovo naziva plitka kopija. Za razliku od elementa xsl:copy-of, xsl:copy nema atribut@select.
U kodu ispod, stavke konteksta se kopiraju u izlaz & sve dječje stavke se zovu & kopirao xsl:apply-template rekurzivno.
node()