You are on page 1of 23

Wykład 17:

XSLT 2
Szablony: Elementy Wymagane
Element template musi posiadać jeden z atrybutów:


atrybut match – definiuje transformację dla
elementu opisanego przez ten atrybut

<xsl:template match="...">...</xsl:template>


atrybut name – wynik produkowany na wyjście za
każdym razem gdy szablon jest wykonywany

<xsl:template name="...">...</xsl:template>
Wykonanie Szablonu: Nazwa
Definicja szablonu z nazwą:

<xsl:template name="nazwa">...</xsl:template>

Wywołanie szablonu:

<xsl:template ...>
<xsl:call-template name="nazwa"/>
</xsl:template>
Wykonanie Szablonu: Przykład
<xsl:template match="root">
<xsl:call-template name="nazwa"/>
<xsl:call-template name="nazwa"/>
</xsl:template>

<xsl:template name="nazwa">
<xsl:text>text</xsl:text>
</xsl:template>
Wykonanie Szablonu: Wzorzec
Definicja szablonu z wzorcem:

<xsl:template match="elem">...</xsl:template>

Wywołanie szablonu:


stosuje się do wszystkich dzieci bieżącego węzła:

<xsl:apply-templates/>


wybiera węzły do których szablon się stosuje:

<xsl:apply-templates select="..."/>
Wykonanie Szablonu: Przykład
<xsl:template match="root">
<xsl:apply-templates/>
<xsl:apply-templates select="@att"/>
</xsl:template>

<xsl:template match="elem">
<xsl:text>elementy</xsl:text>
</xsl:template>

<xsl:template name="@att">
<xsl:text>atrybuty</xsl:text>
</xsl:template>
Szablony z Trybem
Element template może posiadać atrybut mode –
pozwala przetworzyć ten sam zbiór węzłów wiele razy.

Definicja szablonu z trybem:

<xsl:template match="..." mode="...">


...
</xsl:template>

Wywołanie szablonu z trybem:

<xsl:apply-templates select="..." mode="...">


Szablony z Trybem: Przykład
<xsl:template match="root">
<xsl:apply-templates mode="tryb1"/>
<xsl:apply-templates mode="tryb2"/>
</xsl:template>

<xsl:template match="elem" mode="tryb1">


<xsl:text>tryb1:</xsl:text>
<xsl:value-of select="."/>
</xsl:template>

<xsl:template match="elem" mode="tryb2">


<xsl:text>tryb2:</xsl:text>
<xsl:value-of select="."/>
</xsl:template>
Który Szablon?
Nie istnieje szablon dla danego kontekstu :

<xsl:template match="root">...</xsl:template>
<xsl:template match="sub">...</xsl:template>

<root att="wartosc">
<elem><sub>text1</sub></elem>
</root>

Zastosuj szablon domyślny.


Który Szablon?
Istnieje dokładnie jeden szablon dla danego kontekstu :

<xsl:template match="root">...</xsl:template>
<xsl:template match="elem">...</xsl:template>

<root att="wartosc">
<elem><sub>text1</sub></elem>
</root>

Zastosuj ten szablon.


Który Szablon?
Istnieją dwa szablony dla danego kontekstu :

<xsl:template match="root">...</xsl:template>
<xsl:template match="sub">...</xsl:template>
<xsl:template match="elem/sub">...</xsl:template>

<root att="wartosc">
<elem><sub>text1</sub></elem>
</root>

Zastosuj szablon bardziej konkretny.


Który Szablon?
Istnieją dwa szablony dla danego kontekstu.
Oba są równie konkretne:
<xsl:template match="elem" priority="1">
<xsl:text>pierwszy</xsl:text>
</xsl:template>

<xsl:template match="elem" priority="0">


<xsl:text>drugi</xsl:text>
</xsl:template>

Zastosuj szablon o wyższym priorytecie.


Który Szablon?
Istnieją dwa szablony dla danego kontekstu.
Oba są równie konkretne. Oba mają równe priorytety.
<xsl:template match="elem" priority="0">
<xsl:text>pierwszy</xsl:text>
</xsl:template>

<xsl:template match="elem" priority="0">


<xsl:text>drugi</xsl:text>
</xsl:template>

Zastosuj szablon występujący późnej w arkuszu stylów.


Szablony z Parametrami
Definicja szablonu z dwoma parametrami:
<xsl:template name="pole">
<xsl:param name="wysokosc"/>
<xsl:param name="szerokosc"/>
<xsl:value-of select="$wysokosc * $szerokosc"/>
</xsl:template>

Wywołanie szablony z konkretnymi parametrami:

<xsl:call-template name="pole">
<xsl:with-param name="wysokosc" select="10"/>
<xsl:with-param name="szerokosc" select="20"/>
</xsl:call-template>
Parametry Domyślne
Szablon z parametrami o wartościach domyślnych:
<xsl:template name="pole">
<xsl:param name="wysokosc">10</xsl:param>
<xsl:param name="szerokosc">20</xsl:param>
<xsl:value-of select="$wysokosc * $szerokosc"/>
</xsl:template>

Wywołanie szablonu z jednym parametrem:

<xsl:call-template name="pole">
<xsl:with-param name="wysokosc" select="30"/>
</xsl:call-template>
Parametry Domyślne z Wyborem
Szablon z parametrami o wartościach domyślnych
powiązanych z dokumentem wejściowym:
<xsl:template name="pole">
<xsl:param name="wysokosc" select="wys"/>
<xsl:param name="szerokosc" select="szer"/>
<xsl:value-of select="$wysokosc * $szerokosc"/>
</xsl:template>

Wywołanie szablonu bez parametrów:

<xsl:call-template name="pole"/>
Parametry Globalne
Parametry które których zakresem jest cały arkusz.

Występują jako dzieci elementu arkusza:


<xsl:stylesheet ...>
<xsl:param name="gleb">30</xsl:param>
...
</xsl:stylesheet>

Wartości domyślne, jak dla parametrów lokalnych.


Parametry Globalne: Użycie
Wykorzystanie parametru globalnego w szablonie:
<xsl:template name="objetosc">
<xsl:param name="wys" select="wys"/>
<xsl:param name="szer" select="szer"/>
<xsl:value-of select="$wys * $szer * $gleb"/>
</xsl:template>
Parametry Globalne: Nadanie
Parametrom globalnym można nadać wartość w linii
poleceń. Oto przykład xalan:

java org.apache.xalan.xslt.Process
-in zewnetrzne.xml
-xsl zewnetrzne.xsl
-out zewnetrzne.out
-param gleb 50

dla parametru gleb:


<xsl:param name="gleb"/>
Zmienne
Deklaracje zmiennych:


o nazwie nazwa i wartości ""

<xsl:variable name="x"/>


o nazwie nazwa i wartości test

<xsl:variable name="x" select="'test'"/>


o nazwie nazwa i wartości elementu test

<xsl:variable name="x" select="test"/>


Zmienne

wartość zmiennej gleb zależy od wyrażenia wyboru,
które odwołuje się do treści elementu gleb.

<xsl:template name="objetosc">
<xsl:param name="wys" select="wys"/>
<xsl:param name="szer" select="szer"/>
<xsl:variable name="gleb">
<xsl:choose>
<xsl:when test="gleb = 'jeden'">1</xsl:when>
<xsl:when test="gleb = 'dwa'">2</xsl:when>
<xsl:otherwise>3</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$wys * $szer * $gleb"/>
</xsl:template>
Widoczność Zmiennych
Widoczna w elemencie w którym jest zadeklarowana:


zmienna lokalna

<xsl:template name="...">
<xsl:variable name="...">...</xsl:variable>
</xsl:template>


zmienna globalna

<xsl:stylesheet ...>
<xsl:variable name="...">...</xsl:variable>
...
</xsl:template>
Zmienne czy Stałe?
Stałe.

Wartości zmiennych nie można modyfikować.

You might also like