Tekstifunktsioonid XSLis Asukoha järgi saab andmeid XSLi abil XMList ilusti välja võtta. Et kui soovitakse küsida kolmanda inimese eesnimi, siis kirjutatakse /inimesed/inimene[3]/eesnimi sobivasse kohta, näiteks xsl:value-of elemendi select-parameetriks. Kui soovitakse aga nimest vaid esitähte, siis võib kirjutada Esitäht: Funktsioonile substring tuleb ette anda otsitav tekst ning kaks arvu: mitmendast tähest alates ning mitu tähte väljastada. Funktsiooni enese kuju substring(s1, start, nr?) Järgnevalt siis mõned levinumad sõnefunktsioonid: concat(s1, s2, s3*) Parameetritena antud tekstid liidetakse. Elementide arv ei ole piiratud. Üldjuhul saab hakkama ka ilma seda funktsioonid kasutamata, pannes lihtsalt järjestikku vajalikke xsl:value-of elemente ning tekste. Aga mõnikord on concati abil andmeid lühem reastada. Näiteks initsiaalide tarbeks Ehk siis concati sees komadega eraldatult eesnime esitäht, punkt (tekstina esitamiseks ülakomade vahel), siis perekonnanime esitäht ning sellele järgnev punkt. annab tulemuseks "muna". Mõlema funktsiooni kujud näevad välja järgnevalt, teine lihtsalt annab välja eraldajale järgneva osa. substring-before(s1, s2) substring-after(s1, s2) Pea igas programmeerimiskeeles on käsklus teksti pikkuse küsimiseks. Nii ka siin. string-length(s1) ehk siis näitena annab tulemuseks arvu 4. normalize-space(s1) Võtab algusest ja otstest tühikud, muud vahed teeb üheks tühikuks. Kasulik näiteks erikujuliste sisestatud tekstide võrdlemisel või lihtsalt väljundi viisakamaks muutmisel. XMLi andmete juures ei mängi korduvad tühikud rolli, küll aga neist võib tüli tekkida mõnda muusse kohta suunduva väljundi puhul. translate (s1, algsümbolid, lõppsümbolid) Tähtede asendamiseks leiab harjumatu kujuga funktsiooni. Näite järgi on aga ehk toimimine mõistetav: translate('pann', 'an', 'ek') -> 'pekk' Ülesandeid * Koosta XML-andmefail, kus on kirjas auto registrinumber ning omaniku perekonnanimi * Trüki välja auto registrinumber * Trüki välja auto registrinumbri numbrite osa * Trüki välja auto registrinumbri tähtede osa * Trüki välja inimese perekonnanime esimene täht * Trüki välja inimese perekonnanime viimane täht Loendamine Vastuse küsimusele, mitu elementi vastab soovitud otsingule, annab funktsioon count. Näiteks inimeste arvu saab kokku järgnevalt: Inimeste arv: Tahtes kokku loendada kõiki inimesi, kelle eesnimi on Juku, tuleb vastav piirang kirjutada inimese taha kandiliste sulgude sisse. Jukude arv: Saab võrrelda ka suurem ja väikesem olemist. Vastavad võrdlused aga on viisakas kirjutada XMLi jaoks sobivate märgikombinatsioonidena. "Väiksem kui" oleks siis kujul < (less than) ning "suurem kui" kujul > (greater than). Enne Moskva olümpiat sündinud: Ülesandeid * Koosta/otsi XML-andmefail, kus on kirjas auto registrinumber ning omaniku perekonnanimi * Leia, mitme inimese perekonnanimi on Kaalikas * Leia, mitme inimese perekonnanimi algab M-tähega * Leia, mitme auto registrimärgi numbritest viimane on 2 * Leia, mitme auto registrimärgi numbritest viimane on 1 või 2 Tingimused Programmeerimise juures on võimalik tingimusele vastavalt midagi teha või tegemata jätta. Nii ka siin. Tavalise valiku tarvis on käsklus xsl:if. Näide: Esimene nimi algab jotiga Kui tingimus vastab tõele, siis sealne tekst trükitakse, muidu mitte. Käsu kuju siis starts-with(s1, s2) ning selgitus Kontrollitakse, kas esimesena antud tekst algab teisena antud tekstiga. Mõnevõrra sarnane funktsioon on contains(s1, s2) Võrreldes eelmisega ei pruugita alustada algusest, vaid otsitakse lõigu leidmist kogu teksti ulatuses. Tõeväärtuse saab vastuspidiseks pöörata funktsiooniga not(), eraldi else-lauset ei ole. Esimene nimi ei alga a-ga Tingimuseks sobivad ka igasugu võrdlused, mille vastuseks on "jah" või "ei". Näiteks, et kas teksti pikkus on väiksem kui viis sümbolit. Märk "on väiksem kui" ehk "<" kirjutatakse kujul < (less than), sest nii vastab see XMLi süntaksile (millele XSL leht peab töötamiseks vastama. Näiteks Lühike nimi Ülesandeid * Koosta/leia XML-andmefail, kus on kirjas auto registrinumber ning omaniku perekonnanimi * Kui registrimärgi viimane number on 5, siis teata, et ülevaatuse kuu on juuli * Teata iga registrinumbri puhul, millises kuus auto ülevaatusele peab minema. * Kui perekonnanimes sisaldub täht x, siis teata, et tegemist on võõrnimega. * Muul juhul teata, et tegemist pole võõrnimega. Kordused Kui samatüübilisi andmeid on palju, siis tulevad appi kordused. Nii ka XSLi juures. Tsükli loomiseks sobib käsklus xsl:for-each, select-parameetrina antakse ette elemendid mille kontekstis ploki sisu korrata. Et tööd alustatakse juurelemendile vastavast mallist ning sealt seest küsitakse kõiki elemente, mis vastavad mustrile inimesed/inimene, siis saadakse kätte algsest failist kõik viis inimest, kes on pöördutavad kujul /inimesed/inimene. Tsükli sees on igal korral jooksvaks elemendiks juba konkreetne inimene. Esimesel korral siis näiteks Juku Juurikas 1963 Seal saab juba otse pöörduda alamelementide poole. Ehk siis annab vastuseks Juku. Ning iga järgmise ringi juures juba järgmise inimese eesnime. Käivitades XSL-lehe koos andmefailiga saame tulemuse arvatavasti kujul JukuJukuKalleMariOskar Tahtes nimede vahele tühikuid saada, sobib abielemendina xsl:text, mis lubab elemendi alguse ja lõpu vahele kirjutatud teksti otse väljundisse saata. Annab siis tulemuseks Juku Juku Kalle Mari Oskar Kui aga juba HTMLi sisse andmete kirjutamiseks läheb, siis pole otsesed tühikud ja reavahetused kuigi tähtsad - loeb lihtsalt nende olemasolu või puudumine, mitte kogus. Kujundamiseks on aga seal juba omad käsud. Näiteks loetelu jaoks tavapärane komplekt
    kogu loetelu tähistamiseks ning
  • üksiku elemendi tarbeks. Need saab rahumeeli XSLi faili sisse panna.
    Tulemusena võib ilusti vormindatud tulemust imetleda.
    • Juku
    • Juku
    • Kalle
    • Mari
    • Oskar
    Sama tulemuse saab programmide puhul ikka mitmel moel kätte. Eelnenud näites öeldi xsl:for-eachi juures, et läbi tuleb käia kõik elemendid nimega inimene ning xsl:value-ofi juures määrati, et näha soovitakse inimese seest eesnime. Järgnevas näites saadakse sama tulemus nõnda, et juba xsl:for-eachi juures käiakse läbi kõikide inimeste eesnimed. Ning xsl:value-ofi juures pole muud vaja öelda, kui et tuleb kuvada jooksva elemendi (mida tähistatakse punktiga) väärtus.
    Ehkki XSL pole mõeldud suuremamahulisteks arvutusteks ja tekstitöötluseks, õnnestub lihtsamad võrdlused ja kokkuvõtted siin täiesti teha. Järgnevalt siis loetelu nende inimeste perekonnanimedest, kelle eesnimi algab J-iga. Algandmete peale vaadates leiame sealt kaks Jukut: üks Juurikas ning teine Kaalikas. Vastavad perekonnanimed saadakse jätte järgneva avaldise abil. Kandiliste sulgude sees määratakse ära, millistele tingimustele vastavaid inimesi loetellu võetakse. Siin juhul siis kontrolliks XSLi funktsioon nimega starts-with, parameetriteks kontrollitav tekst ning otsitav algustekst. Ning nagu muud tõeväärtusfunktsioonid, nii ka siin on väärtuseks jah või ei. Ning loetellu jäävad need inimesed, kel avaldise puhul väärtuseks jah. Ning nõnda saab tsükli sees otsitud tulemused välja kirjutada. ; Käivitamine nii nagu eelnenud näite puhul E:\kasutaja\jaagup\xml>java XSLMuundur inimesed.xml inimesed4.xsl inimesed4.txt Ning faili sisu piiludes võime just soovitud read selle seest avastada. E:\kasutaja\jaagup\xml>more inimesed4.txt Juurikas; Kaalikas; Plokifunktsioone Kui tsükli abil plokis liikuda, siis tuleb vahel kasuks teada, mitmendal ringil parajasti ollakse ning mitu ringi kokku on. Vastavad abiks olevad funktsioonid on järgnevad: last() viimase järjekorranumber position() jooksva järjekorranumber Ehk siis järgnevas näites trükitakse iga eesnime ette tema järjekorranumber. Käsklus position() annab järjekorranumbri, concat seob ühte ritta kokku selle numbri, sidekriipsu ning vastava inimese eesnime, kelle juures ollakse.
    Väljund paistab välja järgnev:
    • 1 - Juku
    • 2 - Juku
    • 3 - Kalle
    • 4 - Mari
    • 5 - Oskar
    Kui tahta juurde määrata, et mitmes nimi mitmest, siis tuleb lisaks viimase järjekorranumbrit näitav last().
    Ning tulemus veebilehel järgmine: * 1/5 - Juku * 2/5 - Juku * 3/5 - Kalle * 4/5 - Mari * 5/5 - Oskar Ülesandeid * Koosta/leia XML-andmefail, kus on kirjas autode registrinumbrid ning omaniku perekonnanimed * Trüki välja kõik perekonnanimed * Lisa iga perekonnanime ette tema järjekorranumber * Need read, kus registrinumbri viimane number lõppeb ühe või kahega trüki rasvaselt. Kujundus korduse sees Lisaks nimede/andmete ettelugemisele on küllalt sageli vajalik/kasulik neid ka vastavalt juurdekuuluvatele omadustele kujundada, et sobivaid ridu oleks kergem üles leida. Tingimuslauseid, arvutusi ja muid käsklusi saab rahumeeli kasutada ka korduse või korduste sees. Järgnevalt värvitakse hiljem kui 1980ndal aastal sündinud inimeste eesnimed roheliseks. Tehakse eesnimele ümber span-plokk ning sealse stiiliga määratakse nime värv. Ja kui tahta ka ülejäänud nimesid näidata, ainult et tavaliste mustadena, siis üks moodus on loodud plokk lihtsalt kopeerida, tingimusele ümberpöörav not-käsklus ümber panna ning nimele sobiv värv määrata.
    Tulemusena siis loetelu, kus iga nime juures märgitud värv.
    • Juku
    • Juku
    • Kalle
    • Mari
    • Oskar
    Sama saab aga ka märgatavalt lühemalt kirja panna. Iseenesest pole ju nime värvimiseks talle vaja eraldi span-elementi ümber panna. Piisab, kui nime näitava elemendi - praegusel juhul li - stiilis on sobiv värv määratud. Käsklus xsl:attribute võimaldabki juba alanud elemendi sisse atribuute lisada. Järgnevas näites siis näha, et noorematele kui 1980ndal sündinutele pannakse loeteluelemendile rohelise värvi atribuut külge.
    • color:green
    Ning pärast käivitamist on see ilusti näha ka tulemuse juures.
    • Juku
    • Juku
    • Kalle
    • Mari
    • Oskar
    Pikemate ridade puhul on heaks tavaks mõned read ära värvida, et oleks parem andmeid lugeda ja näpuga järge ajada. Reanumbri saame kätte käsuga position(). Nüüd, kui on tahtmine kindla arvu ridade tagant erivärviline rida luua, siis on heaks abivahendiks jagamise jääk, modulus, ehk siin tehe nimega mod. Näitab, et kui vasakul pool olev kogus jagada paremal pool olevaks arvuks võrdseteks osadeks, mitu siis jääb üle. Kui näiteks kaksteist õuna jagada võrdselt neljale lapsele, siis saab igaüks kolm õuna, ühtegi üle ei jää ehk jääk on null. Kui aga on õunu kolmteist, siis üks õun jääb üle ehk jääk on üks. Neljateistkümne puhul kaks, viieteistkümne puhul kolm ning kuusteist jagub taas neljaga, siis jääk jälle null. Nii et kui tahaks iga neljanda rea teistsuguseks teha, siis piisaks kontrollida, et kas jääk jagamisel neljaga on mingi kindel arv nendest võimalikest jääkidest. Ühe puhul oleks värvitud kohe esimene rida, kahe puhul teine, kolme puhul kolmas. Ning kõigepealt neljanda värvimiseks piisab kontrollimast, kas jääk on null. Iga teise rea värvimiseks näiteks sobib järgnev kood:
  • background- color:lightgray
  • Ning tulemus veebilehe koodis on selline.
    • Juku
    • Juku
    • Kalle
    • Mari
    • Oskar
    Ülesandeid * Koosta/leia XML-andmefail, kus on kirjas autode registrinumbrid ning omaniku perekonnanimed * Väljasta andmed tabelina: registrinumbrid ühes ning perekonnanimed teises tulbas. * Värvi ridade taustad üle ühe halliks. * Värvi taustad nõnda, et järjestikku oleksid värvitu, hall ja kollane. Mitu kordust samade andmetega Tavaliselt käiakse andmed ühe korra läbi, näidatakse mis tarvis ja kogu lugu. Aga vahel võib olla põhjust ka mitu korda samu andmeid läbi käia ning elementide vahel seoseid leida ja välja märkida. Järgnevas näites luuakse tabel, kus nii veergudes kui ridades on samad inimesed. Veergude ja ridade ristumiskohal aga nende sünniaastate vahe - siis kohe näha, kes kui palju kellest vanem on. Kui kordus määratakse juurelemendist alates, siis on selline sättimine lihtne - piisab kaks for-each tsüklit üksteise sisse panna ning mõlemale määrata, et tuleb läbi käia elemendid mustriga /inimesed/inimene. Veidi mõtlemist vajab aastate vahe arvutus, sest sisemise inimese sünniaasta varjestab välimise oma ära. Aitab aga, kui välimine element jätta eraldi muutujasse meelde. Siis saab selle andmed ka sisemises plokis kätte ning võib nendega rahus toimetada.
    Inimeste vanuste vahe
    Veebilehel väljund näha järgmine: Inimeste vanuste vahe Juku, 1963 Juku, 1961 Kalle, 1975 Mari, 1981 Oskar, 1971 Juku 0 -2 12 18 8 Juku 2 0 14 20 10 Kalle -12 -14 0 6 -4 Mari -18 -20 -6 0 -10 Oskar -8 -10 4 10 0 Ülesandeid * Pane näide käima * Vähem kui viieaastase vanusevahega lahtrid näita teise värviga * Kirjuta lahtritesse vastavate inimeste perekonnanimed. Nt. Kalle ja Mari ristumiskohale tuleb "Kaalikas ja Maasikas" * Võrreldes eelmisega jäta tühjaks need lahtrid, kus inimene kohtub iseenesega (kõige viisakam kindlaks teha positsiooni järgi). XSL eri struktuuriga andmefailidele Eelnevad näited olid loodud kindlate elemendinimedega andmefaili seest väärtuste kogumiseks ja esitamiseks. Vahel aga võivad andmefailid olla küll mõneti sarnased, aga sugugi mitte samade elemendinimedega ja -kogustega. Tüüpiliseks näiteks on mitmed algselt tabeli kujul olevad andmed, mis XML-i kujule viidud ning mida hiljem sealt soov taas HTML- või mõne muu tabeli kujul esitada. Sellisel juhul osutub kasulikuks käsklus name, mille abil saab etteantud ploki nime küsida. Samuti on kasulik metamärk * (tärn), mis tähistab kõiki vastavas kohas asuvaid alamelemente. Või kui küsida sellise alamelementide ploki nime, siis antakse neist esimese nimi. Siin on allikaks sama inimeste fail. Käsklus name(*) annab vastuseks "inimesed", kuna ollakse juure juures. Käsklus name(*/*) väljastab "inimene", sest see on eelneva alamelement. Tegelikult mustrile vastavad kõik elemendid "inimene", aga kuna küsitakse nime ainult ühe kohta, siis väljastatakse esimese oma. Tahtes läbi käia esimese inimese kõik alamelemendid, sobib tsükliks Lahtiseletatult siis esimene tärn tähendab juures asuvat elementi "inimesed". Järgmine *[1] on esimene inimene. Ning viimase tärni alt tulevad välja esimese inimese eesnimi, perenimi ja synd. Tahtes saada elementide nimesid ja mitte väärtusi, siis aitab taas käsklus name, sedakorda kujul kus trükitakse välja parasjagu jooksva elemendi nimi. Kogu XSLi kood:

    Juurelement:

    Esimene alamelement:

    Alamelemendi järglased:

    Ning tulemuseks saadi siis järgnev HTML, kus võib veenduda, et kõik elemendid õigesti kätte saadi.

    Juurelement: inimesed

    Esimene alamelement: inimene

    Alamelemendi järglased:

    • eesnimi
    • perenimi
    • synd
    Edasi tasub mõelda, et millisel kujul on soov andmeid esitada. Kui veebilehel ja tabelina, siis on tabeli HTML-käsud igati asjakohased. Eelneva loetelu saab vormistada tabeli tulpade pealkirjadena.

    Ning väljund veebilehel on järgnev.

    inimesed

    eesnimi perenimi synd
    Soovides lisaks pealkirjadele ka tegelikke andmeid sisse panna, tuleb lihtsalt kaks tsüklit juurde panna. Pealkirjad ja lahtrite sisud tuleb eraldi tsüklitesse paigutada lihtsalt HTMLi loogka tõttu, kus tuleb vasakult paremale oma andmeid väljastada. Ehkki vajaduse ja tahtmise korral oleks võimalik ehk ka pealkirjaplokk ja andmete läbikäigu plokk ühendada ning lihtsalt if-iga kontrollida, kas ollakse andmetega esimese rea juures. Kui jah, siis oleks paras aeg lisaks muule ka pealkirjalahtrid kirjutada. Siin näites aga pealkirjaosa ja andmete osa eraldi kirjutatud. Andmete tsüklis siis kõigepealt käib läbi kõik elemendid "inimene". Sealt seest võtab kõik, mis ühe inimese seest võtta on. Ning viimaks annab selle elemendi väärtuse, kus sees parajasti oma läbikäiguga ollakse.

    Tulemuseks on viisakas HTML-i tabel.

    inimesed

    eesnimi perenimi synd
    Juku Juurikas 1963
    Juku Kaalikas 1961
    Kalle Kaalikas 1975
    Mari Maasikas 1981
    Oskar Ohakas 1971
    Ülesandeid * Tee näited läbi. Lisa inimesele tunnuseks mass. Veendu, et andmed väljastatakse ka siis tabelina. * Muuda näidet nõnda, et tabeli asemel genereeritaks loetelu, kus on näha iga elemendi vaid kaks esimest väärtust. Näiteks esimese puhul Juku Juurikas * Muuda näidet nõnda, et tabeli asemel genereeritaks komadega eraldatud loetelu. Nt
  • Juku,Juurikas,1963
  • * Muuda näidet nõnda, et tabeli asemel genereeritaks laused, mille abil vastavaid andmeid SQL-baasi sisestada. Inimeste puhul näeks siis lause välja: INSERT INTO inimesed (eesnimi, perenimi, synd) VALUES ('Juku', 'Juurikas', '1963'); * Koosta/leia XML-andmefail, kus on kirjas autode registrinumbrid ning omaniku perekonnanimed * Veendu, et eelnevalt koostatud XSL-lehed töötavad ka uue andmefailiga. Parameetrid Kui samade algandmete põhjal tahetakse kokku panna märgatavalt erinevaid tulemusi, siis tuleb üldjuhul igaks muundamiseks valmis kirjutada omaette XSL- leht. Näiteks HTML- ja WAP-väljund näevad nõnda erinevad välja, et ühist muundajat kirjutada oleks raske. Kui aga valida lihtsalt eri resolutsioonidele arvestatud HTML-i vahel, siis võib XSLi parameetri abil kord rohkem, kord vähem lähteandmeid sisse võtta. Samuti, kui näiteks soovitakse näidata lehel inimeste vanuseid, salvestatud on aga sünniaastad, siis parameetrina antud praeguse aastaarvu järgi saab vähemalt ligikaudugi tulemuse parajaks sättida. Parameetri väärtus tuleb määrata eraldi elemendina enne mallikirjelduste algust. Nagu näha, tuleb parameetri nimi atribuudina, väärtus aga elemendi väärtusena. 5 Hiljem atribuudi väärtust küsides tuleb avaldises selle nimele dollarimärk ette panna. Ilma dollarita tähendaks see vastavanimelist XML-elementi. Andmete sortimiseks tuleb tsükli sisse paigutada alamelement nimega xsl:sort ning parameetrina määrata, millise elemendi väärtuse järgi sorteeritakse. Nagu mujal, nii ka siin oleks võimalik parameetriks koostada avaldis, mis järjestamise peenemalt ette määraks. Soovides väljatrüki abil tühikuga eraldatud ees- ja perekonnanime, aitab funktsioon concat. Muul juhul tuleks sama tulemuse saavutamiseks xsl:value-of element mitmel korral välja kutsuda. ; Ning näide tervikuna. ar 5 Nimed, mis sisaldavad kombinatsiooni : ; Nimed pikkusega ja rohkem: ; Käivitus E:\kasutaja\jaagup\xml>java XSLMuundur inimesed.xml inimesed4a.xsl inimesed4a.txt ja tulemus E:\kasutaja\jaagup\xml>more inimesed4a.txt Nimed, mis sisaldavad kombinatsiooni ar: Oskar Ohakas; Mari Maasikas; Nimed pikkusega 5 ja rohkem: Kalle Kaalikas varuks 0; Oskar Ohakas varuks 0; Parameetrite väärtuste muutmiseks ei pea alati tekstiredaktoriga muutma XSLi faili sisu. Neid saab sättida ka otse XMLi ja XSLi kokkusiduvas koodis ning ka ühendava programmi väljakutsel. Nõnda on ka siin näha, kus pikkusele antakse väärtuseks neli. tolkija.setParameter("pikkus", "4"); Muus osas näeb faile ühendav käivitusprogramm eelnenuga sarnane välja. import javax.xml.transform.*; import javax.xml.transform.stream.*; import java.io.*; public class XSLParameetrid{ public static void main(String argumendid[]) throws Exception{ Transformer tolkija=TransformerFactory.newInstance(). newTransformer(new StreamSource("inimesed4a.xsl")); tolkija.setParameter("pikkus", "4"); tolkija.transform( new StreamSource("inimesed.xml"), new StreamResult(new FileOutputStream("inimesed4a.txt")) ); } } Ka käivitamine sarnane E:\kasutaja\jaagup\xml>java XSLParameetrid Ning tulemusena näeb siis nelja tähe pikkusi ja pikemaid nimesid. E:\kasutaja\jaagup\xml>more inimesed4a.txt Nimed, mis sisaldavad kombinatsiooni ar: Oskar Ohakas; Mari Maasikas; Nimed pikkusega 4 ja rohkem: Juku Juurikas varuks 0; Juku Kaalikas varuks 0; Kalle Kaalikas varuks 1; Mari Maasikas varuks 0; Oskar Ohakas varuks 1; ASP.NET vahenditega sama XSL-lehte käivitades on põhjust veebilehele luua kohad parameetrite väärtuste sisestamiseks. Siinses näites kasutatakse selle tarbeks tekstivälju. Pöörates tähelepanu lehekülje päisele näeb, et sedakorda on põhjust eraldi koodifaili loomiseks, millest siis veebileht päritakse. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="parameetrid.aspx.cs" Inherits="parameetrid" %> Parameetritega leht
            
           

    Otsitav tekst:
    Miinimumpikkus:
    Eraldi koodifailis, lehe laadimisel käivituvas meetodis nimega Page_Load on kirjas, et millised parameetrite väärtused tuleb XSL-failile edasi anda. Eelnevast XSL-failis on näha, et selle algusosas on defineeritud kaks parameetrit. Parameeter nimega otsing vaikeväärtusega "ar" ning parameeter pikkus väärtusega 5. Siinses näites kirjutatakse otsinguparameeter alati üle tekstiväljast tuleva väärtusega. Pikkus asendatakse aga vaid juhul, kui selle jaoks mõeldud tekstiväljas nimega kast2 oli väärtus, mida on võimalik arvuks teisendada. XsltArgumentList-tüüpi muutujasse kogutakse parameetrid ja nende väärtused kokku ning siis pannakse vastav parameetrite loetelu transformatsiooni eest hoolitseva elemendi külge. using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Xml.Xsl; public partial class parameetrid : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { XsltArgumentList p = new XsltArgumentList(); p.AddParam("otsing", "", kast1.Text); int abi; if(int.TryParse(kast2.Text, out abi)){ p.AddParam("pikkus", "", kast2.Text); } xml1.TransformArgumentList = p; } } Nulemusena võib siis näha sisestatud andmetele vastavat tulemust veebilehel. Element pre aitas tekstina tulnud andmed viisakalt eraldi ridadele joondada. Nimed, mis sisaldavad kombinatsiooni M: Mari Maasikas; Nimed pikkusega 2 ja rohkem: Juku Juurikas varuks 2; Juku Kaalikas varuks 2; Kalle Kaalikas varuks 3; Mari Maasikas varuks 2; Oskar Ohakas varuks 3; Otsitav tekst:M Miinimumpikkus:2 Ülesandeid * Koosta tervitav XSL-leht, mille pealkiri antakse ette parameetriga * Anna parameetrina ette praeguse aasta number. Väljasta iga inimese vanus selle aasta lõpuks. * Lase kasutajal tekstiväljast anda ette vähim ja suurim sünniaasta, mille vahel olevate inimeste andmeid näidatakse. Mallid, alamprogrammid Enamikes enesest lugu pidavates programmeerimiskeeltes on eraldiseisvate ning korduvalt ettevõetavate toimingute tarbeks olemas alamprogrammid või midagi sarnast. XSLis on selleks tarbeks mallid. Kirjeldatakse ära, kuidas mingeid andmeid väljundis näidata ning hiljem saab selle malli sobivas kohas välja kutsuda. Järgnevas näiteks on omaette malliks tehtud saatja aadress. Et kui seda vaja kuhugi kirjale lisada, siis piisab vaid vastavast väljakutsest. Defineerimise kohal siis ning väljakutsel Kogu kood tervikuna: Tallinna Ülikooli Informaatika Instituut, Narva maantee 25-419, 10120, Tallinn Lugupeetud vilistlane, kutsume teid taas vana kooli vaatama!
    Ja nagu koodi lugedes aimata võib, tulemuseks on teade koos sinna lõppu lisatud saatja aadressiga. Lugupeetud vilistlane, kutsume teid taas vana kooli vaatama! Tallinna Ülikooli Informaatika Instituut, Narva maantee 25-419, 10120, Tallinn Et malli töö tulemust vastavalt andmetele muuta saaks, selleks tuleb ette anda parameetrid. Malli enese algusesse tuleb kirjutada, et millise nimega parameeter on. Koodis parameetri väärtuse kasutamiseks tuleb sinna dollarimärk ette panna. Tere, Väljakutsel saab temale ette anda tavalise väärtuse. Et Siim on etteantud tekstikonstant, teda ei võeta XML-faili seest, selleks on nimele ülakomad ümber pandud. XSLi kood tervikuna Tere, Ning tekkinud väljund: Tere, Siim Kui nimi võetakse XMList, siis tuleb määrata asukoht, kust see leida. Praegusel juhul antakse alamprogrammile parameetrina kaasa esimese inimese eesnimi. Käivitamisel tervitatakse teda rõõmsasti. Tere, Juku Malli parameetriks ei pruugi olla üksiks väärtus. Selleks võib olla ka etteantud kohast algav andmepuu (nt. terve inimene kõikide tema juurde kuuluvate andmetega) või siis andmekogum (massiiv). Järgnevas näites pruugitaksegi viimast varianti. Loetelu saamiseks käiakse xsl:for-each tsükliga läbi kõik etteantud andmestiku elemendid. Ning malli väljakutsel olev inimesed/inimene/eesnimi annabki kõikide vastavas XML-failis olevate inimeste eesnimed parameetrina kaasa.

    Inimeste eesnimede loetelu

    Tulemuseks on viisakas loetelu.

    Inimeste eesnimede loetelu

    • Juku
    • Juku
    • Kalle
    • Mari
    • Oskar
    Ülesandeid * Koosta mall, mis väljastaks tärnidest rea. Katseta. * Koosta mall, mis trükiks etteantud teksti välja punaselt. * Võrreldes eelmisega saab ka värvi anda ette malli väljakutsel * Koosta mall, mis trükib etteantud elemendist loeteluna välja kõikide alamelementide nimed ja nende väärtused. * Koosta mall, mis saab etta sarnase struktuuriga elementide (näiteks inimeste) massiivi ning väljastab nende alamelementide tulemused tabelina. Katseta mitmesuguste sisendandmete korral.