XML extensible Markup Language. część 4

Podobne dokumenty
XML extensible Markup Language. część 8

XML extensible Markup Language. część 6

XML extensible Markup Language. część 3

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 04

XML extensible Markup Language 3

XSLT. Patryk Czarnik. Instytut Informatyki UW. XML i nowoczesne technologie zarzadzania treścia 2007/08

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarzadzania treścia 2007/08

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarządzania treścią 2008/09. Instytut Informatyki UW

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarzadzania treścia 2008/09. Instytut Informatyki UW. Patryk Czarnik 08 XSLT XML 2008/09 1 / 1

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Przetwarzanie dokumentów XML za pomocą procesora XSLT (Zajęcia r.

Służy do wybierania/wyszukiwania fragmentów dokumentu XML. Przypomina trochę ścieżki w systemie operacyjnym. Niech będzie dany dokument XML:

Język XSLT. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Osie (axes) Location paths

XML Path Language (XPath)

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarządzania treścią 2011/12

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarzadzania treścia 2011/12. Instytut Informatyki UW. Patryk Czarnik 08 XSLT XML 2011/12 1 / 54

Przetwarzanie dokumentów XML za pomocą XSLT ( r.)

XML materiały dydaktyczne - Kurs Podstawowy XSL - wprowadzenie. XSL warstwa przekształcania (XSLT) oraz prezentacji informacji (XSL FO).

Extensible Markup Language III

Wprowadzenie do arkuszy stylistycznych XSL i transformacji XSLT

XPath XML Path Language. XSL Extensible Stylesheet Language. Wyrażenia XPath. XPath data model. Location paths. Osie (axes)

<body> <div style="max-width: 900px; margin: 0 auto;">

Języki formatowania dokumentów strukturalnych. XSL przekształcenia XML-a. XSL a XSLT. XSL części składowe. Zasada działania przekształcenia XSLT

Wprowadzenie do XSLT

Rodzaje przetwarzania XSLT (1)

Języki i Techniki Programowania II. Wykład 13. TRaX, Applety, Java Security

Układ informacji i powiązań między danymi w deklaracji w formacie XML

Układ informacji i powiązań między nimi w deklaracji na podatek leśny (DL-1) w formacie danych XML

UCHWAŁA NR L/932/13 RADY MIASTA MYSŁOWICE. z dnia 19 grudnia 2013 r.

LABORATORIUM 5 WSTĘP DO SIECI TELEINFORMATYCZNYCH WPROWADZENIE DO XML I XSLT

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

λ parametry. wartość funkcji suma = λ x y. x + y kwadrat = λ x. x * x K.M. Ocetkiewicz, 2008 WETI, PG 2 K.M. Ocetkiewicz, 2008 WETI, PG 3

METAJĘZYKI. Politechnika Koszalińska Wydział Elektroniki i Informatyki Katedra Inżynierii Komputerowej

METAJĘZYKI. Politechnika Koszalińska Wydział Elektroniki i Informatyki Katedra Inżynierii Komputerowej

DZIENNIK URZĘDOWY WOJEWÓDZTWA ŚLĄSKIEGO

UCHWAŁA NR 135/XXVII/13 RADY MIASTA ZAMBRÓW. z dnia 26 marca 2013 r.

Układ informacji i powiązań między danymi w deklaracji o wysokości opłaty za gospodarowanie odpadami komunalnymi w formacie danych XML

UKŁAD INFORMACJI I POWI

UCHWAŁA NR XLIII/569/14 RADY MIEJSKIEJ W CZERWIONCE-LESZCZYNACH. z dnia 25 kwietnia 2014 r.

Aplikacje internetowe laboratorium XML, DTD, XSL

Aplikacje internetowe laboratorium XML, DTD, XML Schema, XSL

UCHWAŁA NR VII/49/2015 RADY MIASTA PRUSZCZ GDAŃSKI. z dnia 12 maja 2015 r.

Plan prezentacji. Krótko o XML Arkusze stylów XSLT XSL XSL Path Przegląd konstrukcji języka i przykłady Narzędzia Podsumowanie Literatura

XML i nowoczesne metody zarządzania treścią

XSL, tj. XSLT i XSL-FO czyli jak przekształcać i ładnie wyświetlać XML-e. Kuba Pochrybniak

UCHWAŁA Nr LII/468/2018 RADY MIEJSKIEJ W KARCZEWIE z dnia 27 lutego 2018 r.

UCHWAŁA NR XL/527/14 RADY MIEJSKIEJ W CZERWIONCE-LESZCZYNACH. z dnia 29 stycznia 2014 r.

UCHWAŁA NR XLII/992/13 RADY MIASTA KATOWICE. z dnia 27 listopada 2013 r.

DZIENNIK URZĘDOWY WOJEWÓDZTWA ŚLĄSKIEGO

XML i nowoczesne technologie zarządzania treścią

Kurs WWW Język XML, część II

UKŁAD INFORMACJI I POWI

Aplikacje internetowe. Interfejs użytkownika

Przegląd języków zapytań

Prezentacja i transformacja

Kraków, dnia 10 czerwca 2015 r. Poz UCHWAŁA NR VIII/60/2015 RADY MIEJSKIEJ W KĘTACH. z dnia 29 maja 2015 roku

Wprowadzenie do standardu XSL

UKŁAD INFORMACJI I POWIĄZAŃ MIĘDZY NIMI W INFORMACJI W SPRAWIE PODATKU LEŚNEGO (IL-1) W FORMACIE DANYCH XML

UCHWAŁA NR II/17/2014 RADY GMINY PRZODKOWO. z dnia 30 grudnia 2014 r.

XML & XSLT. Programowanie w Javie 2

METODY REPREZENTACJI INFORMACJI

Dlaczego Python jest lepszy od XSLT?

Przykładowy dokument XML

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Location paths. Osie (axes)

Plan prezentacji XSLT. XSLT Ogólna charakterystyka. Drzewo XML. Wstęp. Przedmiot: XML i jego zastosowania. Zagadnienia podstawowe

DZIENNIK URZĘDOWY WOJEWÓDZTWA ŚLĄSKIEGO

XML i nowoczesne technologie zarządzania treścią

Egzamin z przedmiotu Projektowanie języków XML imię i nazwisko. Zadanie Suma Punkty Max Punkty

Informacja podatku łączny styl

Inżynieria biomedyczna

Prezentacja i transformacja

XPath 2.0 / XSLT 2.0 / XQuery 1.0. Inne standardy związane z XML-em. XPath 2.0 XSLT 2.0. XPath 2.0 funkcyjny język programowania

Załącznik nr 2 do uchwały Nr XXII/ 141 /2013 Rady Gminy Bojszowy z dnia r. <?xml version="1.0" encoding="utf-8"?>

XHTML - Extensible Hypertext Markup Language, czyli Rozszerzalny Hipertekstowy Język Oznaczania.

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

XML extensible Markup Language 7

XML extensible Markup Language. część 5

<meta:wartosc> </meta:identyfikator> <meta:rodzajrelacji>maczesc</meta:rodzajrelacji>

Przykładowy dokument XML

Aplikacje internetowe laboratorium XML, DTD, XML Schema, XSL

UCHWAŁA NR XX/186/2016 RADY GMINY PAWŁOWICE. z dnia 27 września 2016 r.

Ogólna struktura dokumentu XSL-FO. Model formatowania. Ogólna struktura dokumentu XSL-FO C.d. Przykład Hello World Użycie szablonu strony

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

Podstawy (X)HTML i CSS

Rodzaje przetwarzania XSLT (1) XSLT część 2. Inne standardy związane z XML-em. Rodzaje przetwarzania XSLT (2) Zmienne. Zaawansowane możliwości XSLT

XML DTD XML Schema CSS

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Przykładowy dokument XML

WYKŁAD 1 METAJĘZYK SGML CZĘŚĆ 1

Prezentacja dokumentów XML

UCHWAŁA NR XXXVI/279/2018 RADY GMINY BESTWINA. z dnia 19 marca 2018 r.

Tworzenie raportów XML Publisher przy użyciu Data Templates

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

UCHWAŁA NR XVII/237/2016 RADY MIEJSKIEJ W WIELICZCE. z dnia 7 kwietnia 2016 r.

Prezentacja dokumentów XML

UCHWAŁA NR VI/76/15 RADY MIEJSKIEJ W CZERWIONCE-LESZCZYNACH. z dnia 27 lutego 2015 r.

Wstęp do programowania

Instrukcja dla ucznia

Usługi WWW. dr Zbigniew Lipiński Instytut Matematyki i Informatyki ul. Oleska Opole zlipinski@math.uni.opole.pl

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

Transkrypt:

XML extensible Markup Language część 4

XSL transformations (XSLT) XSLT (ang. extensible Stylesheet Language Transformations) jest opartym na XML językiem transformacji dokumentów XML XSLT umożliwia przetłumaczenie dokumentów z jednego formatu XML na inny format XML, ale również na HTML, PDF i inne. Arkusze XSLT określają w jaki sposób przekształcić poszczególne elementy wejściowe pliku XML. dokument XML arkusz XSLT procesor XSLT plik wyjściowy (XML, HTML, PDF etc.)

Struktura XSLT Arkusz XSLT ma następującą strukturę <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> INSTRUKCJE OKREŚLAJĄCE PRZEKSZTAŁCENIA ELEMENTÓW </xsl:stylesheet> Zapisujemy go w pliku z rozszerzeniem xsl np. arkusz.xsl W dokumencie XML, który ma być przekształcamy umieszczamy <?xml-stylesheet type="application/xml" href="arkusz.xsl"?>

<xsl:template> Dokument XML z atrybutami + XSLT <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="application/xml" href="arkusz.xsl"?> <spis_osob> <osoba wiek="29"> <imie>marek</imie> <nazwisko>nowak</nazwisko> </osoba> <osoba wiek="33"> <imie>tomasz</imie> <nazwisko>pawlak</nazwisko> </osoba> <osoba wiek="35"> <imie>piotr</imie> <nazwisko>kaczkowski</nazwisko> </osoba> </spis_osob>

<xsl:template> Odwołanie do elementu z atrybutem o określonej wartości. Przykład <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="osoba[@wiek = '33']"> abc </xsl:stylesheet> W przeglądarce:

<xsl: apply-templates select=" "/> Przetwarzanie (dzieci) elementu. Przykład <xsl:template match="/"> <html> <body> <h3>spis</h3> <xsl:apply-templates/> </body> </html> <xsl:template match="osoba"> <p> <xsl:apply-templates select="imie"/> <xsl:apply-templates select="nazwisko"/> Wiek: <span style="color:red"> <xsl:value-of select="@wiek"/> </span> </p>

<xsl: apply-templates select=" "/> Przetwarzanie (dzieci) elementu. Przykład (cd) <xsl:template match="imie"> Imie: <span style="color:blue"><xsl:value-of select="."/> </span><br/> <xsl:template match="nazwisko"> Nazwisko: <span style="color:green"><xsl:value-of select="."/> </span><br/>

<xsl: apply-templates select=" "> W przeglądarce:

<xsl: apply-templates select=" "/> Przetwarzanie (dzieci) elementu. Przykład (cd) Definiujemy szablon tylko dla elementu imie: <xsl:template match="imie"> Imie: <span style="color:blue"><xsl:value-of select="."/> </span><br/> W przeglądarce:

<xsl: apply-templates select=" "/> A teraz inna wersja znanego nam już arkusza XSLT. Przykład <xsl:template match="/"> <html> <body> <h3>spis</h3> <table border="1"> <tr> <th>first name</th> <th>last name</th> <th>age</th> </tr> <xsl:apply-templates/> </table> </body> </html>

<xsl: apply-templates select=" "/> Przykład (cd) Szablon dla elementu osoba: <xsl:template match="osoba"> <tr> <xsl:apply-templates select="imie"/> <xsl:apply-templates select="nazwisko"/> <xsl:apply-templates select="wiek"/> </tr>

<xsl: apply-templates select=" "/> Przykład (cd) Szablon dla pozostałych elementów: <xsl:template match="imie"> <td><xsl:value-of select="."/></td> <xsl:template match="nazwisko"> <td><xsl:value-of select="."/></td> <xsl:template match="wiek"> <td><xsl:value-of select="."/></td>

<xsl: apply-templates select=" "> W przeglądarce:

<xsl:attribute> Do elementu HTML możemy dodać atrybut będący zawartością jakiegoś elementu bądź wartością atrybutu z dokumentu XML. Przykład <galeria> <obrazek>most.jpg</obrazek> <obrazek>widok.jpg</obrazek> </galeria> <body> <h3>obrazki</h3> <xsl:for-each select="galeria/obrazek"> <img> <xsl:attribute name="src"> <xsl:value-of select="."/> </xsl:attribute> </img> </xsl:for-each> </body>

<xsl:attribute> Przykład Inaczej: <galeria> <obrazek plik="most.jpg"/> <obrazek plik="widok.jpg"/> </galeria> <body> <h3>obrazki</h3> <xsl:for-each select="galeria/obrazek"> <img> <xsl:attribute name="src"> <xsl:value-of select="@plik"/> </xsl:attribute> </img> </xsl:for-each> </body>

Element nie istnieje? Przykład <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="application/xml" href="arkusz.xsl"?> <spis_osob> <osoba> <imie>marek</imie> <nazwisko>nowak</nazwisko> <wiek>23</wiek> </osoba> <osoba> <imie>tomasz</imie> <nazwisko>pawlak</nazwisko> <wiek>33</wiek> </osoba> <osoba> <imie>piotr</imie> <nazwisko>kaczkowski</nazwisko> </osoba> </spis_osob>

Element nie istnieje? Przykład (cd) <table border="1"> <tr> <th>first name</th><th>last name</th><th>age</th> </tr> <xsl:for-each select="spis_osob/osoba"> <tr> <td><xsl:value-of select="imie"/></td> <td><xsl:value-of select="nazwisko"/></td> <xsl:choose> <xsl:when test="wiek"> <td><xsl:value-of select="wiek"/></td> </xsl:when> <xsl:otherwise> <td style="background-color:red"> <xsl:text>brak danych</xsl:text> </td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table>

<xsl:template> Do tej pory szablony były wywoływane w chwili napotkania elementu w dokumencie XML. Przykład <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="osoba"> abc </xsl:stylesheet> W przeglądarce:

<xsl:call-template> Szablon może być też wywołany przez nazwę, podobnie jak funkcja w języku C++ lub Java. Składnia: <xsl:call-template name="templatename"> <!-- Content:xsl:with-param* --> </xsl:call-template>

<xsl:call-template> Przykład (cd) Arkusz XSL: <xsl:template match="/"> <html> <body> <h3>obrazki</h3> <xsl:for-each select="galeria/obrazek"> <xsl:call-template name="test"/> </xsl:for-each> </body> </html> <xsl:template name="test"> abc <galeria> <obrazek plik="most.jpg"/> <obrazek plik="widok.jpg"/> </galeria>

<xsl:call-template> Przykład (cd) Czy można do szablonu przekazać zawartość elementu lub wartość atrybutu? <xsl:template match="/"> <html> <body> <h3>obrazki</h3> <xsl:for-each select="galeria/obrazek"> <xsl:call-template name="test"/> </xsl:for-each> </body> </html> <xsl:template name="test"> abc?

<xsl:param> Deklaracja lokalnego bądź globalnego parametru. Parametr jest lokalny jeżeli jest zadeklarowany w elemencie template. Składnia: <xsl:param name="name" select="expression"> <!-- Content:template --> </xsl:param> Atrybuty: name określa nazwę parametru (wymagany) select wartość w postaci wyrażenia XPath (opcjonalny)

<xsl:with-param> Definiujemy wartość parametru, który ma być przekazany do szablonu. Składnia: <xsl:with-param name="name" select="expression"> <!-- Content:template --> </xsl:with-param> Atrybuty: name określa nazwę parametru (wymagany) select wartość w postaci wyrażenia XPath (opcjonalny)

<xsl:param> + <xsl:with-param> Jeżeli szablon wymaga parametru to zapisujemy to tak: <xsl:template name="tname"> <xsl:param name="pname"/>... $pname... Wartość parametru musimy przesłać do szablonu przy wywołaniu: <xsl:call-template name="tname"> <xsl:with-param name="pname" select="expression"/> </xsl:call-template>

<xsl:param> + <xsl:with-param> Przykład <body> <h3>obrazki</h3> <galeria> <obrazek>most.jpg</obrazek> <obrazek>widok.jpg</obrazek> </galeria> <xsl:for-each select="galeria/obrazek"> <xsl:call-template name="test"> <xsl:with-param name="plik" select="." /> </xsl:call-template> </xsl:for-each> </body> <xsl:template name="test"> <xsl:param name="plik"/> <img> <xsl:attribute name="src"> <xsl:value-of select="$plik"/> </xsl:attribute> </img>

<xsl:param> Przykład <wspolczynniki a="0" b="1"/> <xsl:param name="a" select="/wspolczynniki/@a"/> <xsl:param name="b" select="/wspolczynniki/@b"/> <xsl:template match="/"> <html> <body> <h4>rozwiązanie równania: <span> <xsl:value-of select="$a"/>x+ <xsl:value-of select="$b"/> </span> </h4> <xsl:call-template name="ilerozwiazan"/> </body> </html>

<xsl:param> Przykład (cd) <wspolczynniki a="0" b="1"/> <xsl:template name="ilerozwiazan"> <xsl:choose> <xsl:when test="$a!=0"> <b>1 rozwiązanie:</b> x<sub>1</sub>= <xsl:value-of select="-($b div $a)"/> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="$b=0"> <b>nieskończenie wiele rozw.</b> </xsl:when> <xsl:otherwise> <b>0 rozwiązań</b> </xsl:otherwise> </xsl:choose> </xsl:otherwise></xsl:choose>

<xsl:param> Przykład (cd) W oknie przeglądarki: <wspolczynniki a="0" b="1"/>

<xsl:param> Przykład <wspolczynniki a="1" b="2" c="10"/> <xsl:param name="a" select="/wspolczynniki/@a"/> <xsl:param name="b" select="/wspolczynniki/@b"/> <xsl:param name="c" select="/wspolczynniki/@c"/> <xsl:template match="/"> <html> <body> <h4>rozwiązanie równania:</h4> <span> <xsl:value-of select="$a"/>x<sup>2</sup>+ <xsl:value-of select="$b"/>x+ <xsl:value-of select="$c"/> </span> <xsl:call-template name="ilerozwiazan"/> </body> </html>

<xsl:param> Przykład (cd) <wspolczynniki a="1" b="2" c="10"/> <xsl:template name="ilerozwiazan"> <xsl:param name="delta" select="($b*$b)-(4*$a*$c)"/> <p> =<xsl:value-of select="$delta"/> </p> <xsl:choose> <xsl:when test="$delta > 0"> <b>2 rozwiązania</b> </xsl:when> <xsl:when test="$delta = 0"> <b>1 rozwiązanie</b> </xsl:when> <xsl:otherwise> <b>0 rozwiązań</b> </xsl:otherwise> </xsl:choose>

<xsl:param> Przykład (cd) W oknie przeglądarki:

<xsl:param> + <xsl:with-param> Przykład Arkusz XSL: <potega> <podstawa>4</podstawa> </potega> <xsl:template match="/"> <html> <xsl:value-of select="potega/podstawa"/> <sup>2</sup> = <xsl:call-template name="potega"> <xsl:with-param name="p" select="potega/podstawa"/> </xsl:call-template> </html> <xsl:template name="potega"> <xsl:param name="p"/> <span><xsl:value-of select="$p*$p"/></span>

Operacje matematyczne Przykład Arkusz XSL: <xsl:template match="liczby"> <html> <ul> <liczby> <x>4</x> <y>3.2</y> <z>11</z> </liczby> <li>a.4 + 3.2=<xsl:value-of select="x + y"/></li> <li>b.3.2-4=<xsl:value-of select="y - x"/></li> <li>c.4 * 3.2=<xsl:value-of select="x * y"/></li> <li>d.11/3.2=<xsl:value-of select="z div y"/></li> <li>e.4+3.2*11= <xsl:value-of select="x+y*z"/></li> <li>f.(4+3.2)*11=<xsl:value-of select="(x+y)*z"/></li> <li>g.11 mod 4=<xsl:value-of select="z mod x"/></li> <li>h.4+3.2+11=<xsl:value-of select="sum(*)"/></li> <li>i.floor(3.2)=<xsl:value-of select="floor(y)"/></li> <li>j.round(3.2)=<xsl:value-of select="round(y)"/></li> <li>k.3.2+string-length("3.2")= <xsl:value-of select="y+string-length(y)"/></li> <li>l. 11+"hello"=<xsl:value-of select="z+'hello'"/></li> </ul> </html>

Operacje matematyczne Przykład (cd) W oknie przeglądarki:

<xsl:variable> Deklaracja lokalnej bądź globalnej zmiennej. Zmienna jest loklana jeżeli jest zadeklarowana w elemencie template. Składnia: <xsl:variable name="name" select="expression"> <!-- Content:template --> </xsl:variable> UWAGA: raz ustalona zmienna nie powinna zmieniać wartości!!!

<xsl:variable> Nadanie wartości zmiennej przez atrybut. Przykład <xsl:variable name="osoba" select="'przemek'"/> <xsl:template match="/"> <html><body> <h3>spis</h3> <xsl:copy-of select="$osoba" /> </body></html> W przeglądarce:

<xsl:variable> Nadanie wartości zmiennej przez zawartość elementu. Przykład <xsl:variable name="osoba"> <osoba> <imie>przemek</imie> <nazwisko>kowal</nazwisko> <wiek>42</wiek> </osoba> W przeglądarce: </xsl:variable> <xsl:template match="/"> <html><body> <h3>spis</h3> <xsl:copy-of select="$osoba"/> </body></html>

<xsl:variable> A co jeżeli zmienimy wartość zmiennej? Przykład <xsl:variable name="osoba" select="'przemek'"/> <xsl:template match="/"> <html><body> <h3>spis</h3> <xsl:copy-of select="$osoba" /> </body> </html> <xsl:variable name="osoba" select="'agata'"/> W przeglądarce:

<xsl:variable> Nadanie wartości zmiennej przez wyrażenie XPath. Przykład Dokument XML: <liczby start="1" stop="31"/> Arkusz XSL: <xsl:variable name="a" select="/liczby/@start"/> <xsl:variable name="b" select="/liczby/@stop"/> <xsl:template match="/"> <html> <body> <p>a=<xsl:value-of select="$a"/></p> <p>b=<xsl:value-of select="$b"/></p> </body> </html>

<xsl:variable> Przykład <xsl:variable name="start" select="/tabela/@start"/> <xsl:variable name="stop" select="/tabela/@stop"/> <xsl:variable name="zm1" select="$start + $stop"/> <xsl:variable name="zm2" select="$start + $stop + 10"/> <xsl:template match="/"> <html> <body> <p>zmienna 1 = <xsl:value-of select="$zm1"/></p> <p>zmienna 2 = <xsl:value-of select="$zm2"/></p> </body> </html> W przeglądarce:

Iteracja Rozważmy teraz następujący program: Przykład int start=1; int stop=10; int main() { for(int i=start;i<=stop;i++) { cout<<i; } return 0; }

Rekurencja To samo rekurencyjnie: Przykład int start=1; int stop=10; void wypisz(int i) { if(i<stop+1) { cout<<i; wypisz(++i); } } int main() { wypisz(start); return 0; }

Rekurencja w XSLT Spróbujmy to samo uzyskać w XSLT. Przykład Dokument XML: <?xml version="1.0"?> <?xml-stylesheet type="application/xml" href="arkusz.xsl"?> <liczby start="1" stop="10"/> Arkusz XSL: <xsl:variable name="start" select="/liczby/@start"/> <xsl:variable name="stop" select="/liczby/@stop"/>

Rekurencja w XSLT Przykład (cd) <liczby start="1" stop="10"/> Arkusz XSL (cd): <xsl:template name="liczby"> <xsl:param name="index" select="$start"/> <xsl:if test="$index < $stop+1"> <span><xsl:value-of select="$index"/></span> <xsl:call-template name="liczby"> <xsl:with-param name="index" select="$index+1"/> </xsl:call-template> </xsl:if>

Rekurencja w XSLT Przykład (cd) <liczby start="1" stop="10"/> Arkusz XSL (cd): <xsl:template match="/"> <html> <body> <h3>wypisujemy liczby</h3> <xsl:call-template name="liczby"/> </body> </html> W przeglądarce:

<xsl:text> Element umożliwiający dodanie tekstu do pliku wynikowego. Przykład (już omawiany ale zmodyfikowany!) <xsl:template name="liczby"> <xsl:param name="index" select="$start"/> <xsl:if test="$index < $stop+1"> <span><xsl:value-of select="$index"/></span> <xsl:text>,</xsl:text> <xsl:call-template name="liczby"> <xsl:with-param name="index" select="$index+1"/> </xsl:call-template> </xsl:if>

<xsl:text> Usuńmy jeszcze ostatni przecinek <xsl:template name="liczby"> <xsl:param name="index" select="$start"/> <xsl:if test="$index < $stop+1"> <span><xsl:value-of select="$index"/></span> <xsl:if test="$index!=$stop"> <xsl:text>,</xsl:text> </xsl:if> <xsl:call-template name="liczby"> <xsl:with-param name="index" select="$index+1"/> </xsl:call-template> </xsl:if>

<xsl:text> I jeszcze jedna modyfikacja <xsl:template name="liczby"> <xsl:param name="index" select="$start"/> <xsl:if test="$index < $stop+1"> <span><xsl:value-of select="$index"/></span> <xsl:if test="$index=$stop"> <xsl:text>,</xsl:text> </xsl:if> <xsl:call-template name="liczby"> <xsl:with-param name="index" select="$index+1"/> </xsl:call-template> </xsl:if>