XSLT

24
Jakub Wojciechowski PJWSTK 2002 XSLT Jakub Wojciechowski

description

XSLT. Jakub Wojciechowski. Plan prezentacji. XPath Podstawy XSLT Ogólna budowa Zastosowanie XPath w szablonach Elementy. Xpath - wprowadzenie. Służy do znajdywania elementów dokumentu XML spełniających określony warunek - PowerPoint PPT Presentation

Transcript of XSLT

Page 1: XSLT

Jakub Wojciechowski PJWSTK 2002

XSLT

Jakub Wojciechowski

Page 2: XSLT

Jakub Wojciechowski PJWSTK 2002

Plan prezentacji

• XPath– Podstawy

• XSLT – Ogólna budowa– Zastosowanie XPath w szablonach– Elementy

Page 3: XSLT

Jakub Wojciechowski PJWSTK 2002

Xpath - wprowadzenie

• Służy do znajdywania elementów dokumentu XML spełniających określony warunek

• Składnia zbliżona do nazw w systemie plików (przykład: /samochody/fiat/ )

Page 4: XSLT

Jakub Wojciechowski PJWSTK 2002

XPath cz. 1

<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA>

XML:

/AAA/BBB

Wyrażenie XPath:

ścieżka bezwzględna

Page 5: XSLT

Jakub Wojciechowski PJWSTK 2002

XPath cz. 2

<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA>

XML:

Wyrażenie XPath:

//BBB

Wszystkie wystąpienia wzorca w dokumencie

XML

Page 6: XSLT

Jakub Wojciechowski PJWSTK 2002

XPath cz. 3

<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/>

<CCC/> </DDD> <CCC/> </AAA>

XML:

Wyrażenie XPath:

/AAA/DDD/*

Wszystkie elemnty leżące „głębiej”

Page 7: XSLT

Jakub Wojciechowski PJWSTK 2002

XPath cz. 4 atrybuty

<AAA> <BBB id=”1”/> <CCC/> <BBB id=”2”/> <BBB name=”bb”/> <DDD> <BBB/> </DDD> <CCC/> </AAA>

XML:

Wyrażenie XPath:

//BBB[@id=‘2’]//AAA/BBB[@id=‘2’]

Wyrażenie wybierające element BBB z atrybutem

id o wartości 2

Page 8: XSLT

Jakub Wojciechowski PJWSTK 2002

XPath cz. 5

<AAA> <BBB id=”1/> <BBB id=”2”/> <BBB id=”3”/> <BBB/> <BBB/> <BBB id=”6”/> <BBB name=”bb”/>

</AAA>

XML:

Wyrażenie XPath:

//BBB[position() mod 2 =0]

Wybierz parzyste elemety BBB

Page 9: XSLT

Jakub Wojciechowski PJWSTK 2002

XSLT

• Przetwarzanie dokumentów XML na inne dokumenty XML (w szczególności na HTML)

• Zbiór szablonów przekształcających elementy pasujące do wzorca na np. kod HTML

Page 10: XSLT

Jakub Wojciechowski PJWSTK 2002

XSLT budowa

<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

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

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

</xsl:stylesheet>

Page 11: XSLT

Jakub Wojciechowski PJWSTK 2002

Zastosowanie XPath w XSLT

<xsl:template match="/">

<html>

<xsl:apply-templates match=”/AA/BB[@color=‘blue’]”/>

</html>

</xsl:template>

<xsl:template match="BB">

<b><xsl:value-of select=”@name”/></b><br/>

</xsl:template>

Page 12: XSLT

Jakub Wojciechowski PJWSTK 2002

<xsl:template match="/">

<html>

<xsl:apply-templates match=”/AA/BB[@color=‘blue’]”/>

</html>

</xsl:template>

<xsl:template match="/AAA">

<b><xsl:value-of select=”@name”/></b><br/>

</xsl:template>

<AA>

<BB color="red" name="aaaa"/>

<BB color="blue" name="nazwa"/>

<BB color="red" name="bbbb"/>

<BB color="red" name="inny"/>

<BB color="blue" name="numer"/>

</AA>

<html> <b>nazwa</b><br/> <b>numer</b><br/></html>

Page 13: XSLT

Jakub Wojciechowski PJWSTK 2002

Element <xsl:template>

• Atrybuty:– name – określa nazwę szablonu

– match – określa do jakich elementów XML ma zostać użyty

– mode – określa który w szablonów o tej samej nazwie zostanie użyty

<xsl:template name=”lista”> </xsl: ...>

<xsl:template match=”BB” mode=”wersja1”> </xsl:template>

Page 14: XSLT

Jakub Wojciechowski PJWSTK 2002

Wywoływanie szablonów

• <xsl:apply-templates match=”/scieżka/”/>Wywołanie pasującego szablonu dla wszystkich wystąpień danego elementu. Dla każdego elementu oddzielne wywołanie szablonu.Możliwe jest posortowanie elementów przed wywołaniem szablonu.

<xsl:apply-templates match=”/AA/BB”><xsl:sort order = "descending" />

</xsl:apply-templates>

Page 15: XSLT

Jakub Wojciechowski PJWSTK 2002

Wywoływanie szablonów cz. 2

• <xsl:call-template name=”NazwaSzablonu”>

Pojedyncze wywołanie szablonu.

W przeciwieństwie do xsl:apply-templates, xsl:call-template nie zmienia aktualnej pozycji w dokumencie XML.

Page 16: XSLT

Jakub Wojciechowski PJWSTK 2002

Wypisywanie wartości

<xsl:value-of select=”/scieżka”/>

Wypisuje wartość znajdującą się pod podaną ścieżką Xpath np.:

<xsl:value-of select=”/BBB/CCC/@id”/>

Page 17: XSLT

Jakub Wojciechowski PJWSTK 2002

Instrukcje warunkowe cz. 1

• <xsl:if test=”warunek”> </xsl:if>W waruku można podać wyrażenie boolowskie (np. @attr==‘2’) lub ścieżkę Xpath. Istnienie elementu pod podaną ścieżką jest równoznaczne z wartością TRUE; brak elementu => FALSE.Instrukcja <xsl:if > nie posiada ELSE!Znaki ‘<‘ i ‘>’ nie mogą być użyte do porównywania wartości. Zamiast nich wprowadzono oznaczenie &gt; dla > i &lt; dla <.

Page 18: XSLT

Jakub Wojciechowski PJWSTK 2002

Instrukcje warunkowe cz. 2

• <xsl:choose> (odpowiednik switch z Java, C)

<xsl:when test=”warunek1”> ... </xsl:when>

<xsl:when test=”warunek2”> ... </xsl:when>

<xsl:otherwise> ... </xsl:otherwise>

</xsl:choose>

Page 19: XSLT

Jakub Wojciechowski PJWSTK 2002

Pętla

• <xsl:for-each select=”/scieżka”> ... </xsl:for-each>Przejście po wszystkich elementach leżących na danej ścieżce. Możliwe jest sortowanie jak przy xsl:apply-templates:

<xsl:for-each select=”/scieżka”><xsl:sort>

</xsl:for-each>

Page 20: XSLT

Jakub Wojciechowski PJWSTK 2002

Parametry

• Istnieje możliwość przekazania parametrów podczas wywoływania szablonu.

<xsl:template name=”szab1”>

<xsl:param name=”SIZE”/><xsl:param name=”TYT” select=”brak”/> <xsl:value-of select=”$SIZE”/>

</xsl:template>

Wywołanie:<xsl:call-template name=”szab1”>

<xsl:with-param name=”SIZE”>40</xsl:with-param><xsl:with-param name=”TYT”><xsl:value-of select=”/BB/@tytul”/> </xsl:with-param>

</xsl:call-template>

Page 21: XSLT

Jakub Wojciechowski PJWSTK 2002

Wszystko razem czyli przykład

Dokument XML z kursami akcji spółek giełdowych:

<nasdaq><company>

<name>MSTF</name><price>57.69</price><change>0.02</price><vol>31,952,100</vol><link>http://www.microsoft.com</link>

</company><company>

<name>ORACLE</name><price>11.90</price><change>-2.06</price><vol>46,174,700</vol><link>http://www.oracle.com</link>

</company><company>

<name>SUNW</name><price>4.14</price><change>-3.52</price><vol>82,635,500</vol><link>http://www.sun.com</link>

</company></nasdaq>

Page 22: XSLT

Jakub Wojciechowski PJWSTK 2002

Przykład XSLT<xsl:template match=”/”> <html> <table border=”1”> <tr><td>Nazwa</td> <td>cena</td> <td>zmiana</td> <td>obrót</td> </tr> <xsl:for-each select=”//company”> <tr> <td><a href="{./link}"><xsl:value-of select=”./name”/></a></td> <td><xsl:value-of select=”./price”/></td> <td> <xsl:choose> <xsl:when test="./change &gt; 0"> <font color="blue"><xsl:value-of select="./change"/>%</font> </xsl:when> <xsl:otherwise> <font color="red"><xsl:value-of select="./change"/>%</font> </xsl:otherwise> </xsl:choose> </td> <td><xsl:value-of select="./vol"/></td> </tr> </xsl:for-each> </table> </html></xsl:template>

Page 23: XSLT

Jakub Wojciechowski PJWSTK 2002

Wynik transformacji<html>

<table border="1">

<tr><td>Nazwa</td> <td>cena</td> <td>zmiana</td> <td>obrót</td> </tr>

<tr><td><a href="www.microsoft.com">MSFT</a></td> <td>57.69</td> <td><font color="blue">0.02%</font></td> <td>31,952,100</td> </tr>

<tr><td><a href="www.oracle.com">ORACLE</a></td> <td>11.90</td> <td><font color="red">-2.06%</font></td> <td>46,174,700</td> </tr>

<tr><td><a href="www.sun.com">SUNW</a></td> <td>4.14</td> <td><font color="red">-3.52%</font></td> <td>82,635,500</td> </tr>

</table>

</html>

Page 24: XSLT

Jakub Wojciechowski PJWSTK 2002

Dziękuje

??? Pytania ???