240 likes | 464 Views
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
E N D
XSLT Jakub Wojciechowski Jakub Wojciechowski PJWSTK 2002
Plan prezentacji • XPath • Podstawy • XSLT • Ogólna budowa • Zastosowanie XPath w szablonach • Elementy 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/ ) Jakub Wojciechowski PJWSTK 2002
XPath cz. 1 XML: <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> Wyrażenie XPath: /AAA/BBB ścieżka bezwzględna Jakub Wojciechowski PJWSTK 2002
XPath cz. 2 XML: <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> Wyrażenie XPath: //BBB Wszystkie wystąpienia wzorca w dokumencie XML Jakub Wojciechowski PJWSTK 2002
XPath cz. 3 XML: <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> <CCC/> </DDD> <CCC/> </AAA> Wyrażenie XPath: /AAA/DDD/* Wszystkie elemnty leżące „głębiej” Jakub Wojciechowski PJWSTK 2002
XPath cz. 4 atrybuty XML: <AAA> <BBB id=”1”/> <CCC/> <BBB id=”2”/> <BBB name=”bb”/> <DDD> <BBB/> </DDD> <CCC/> </AAA> Wyrażenie XPath: //BBB[@id=‘2’] //AAA/BBB[@id=‘2’] Wyrażenie wybierające element BBB z atrybutem id o wartości 2 Jakub Wojciechowski PJWSTK 2002
XPath cz. 5 XML: <AAA> <BBB id=”1/> <BBB id=”2”/> <BBB id=”3”/> <BBB/> <BBB/> <BBB id=”6”/> <BBB name=”bb”/> </AAA> Wyrażenie XPath: //BBB[position() mod 2 =0] Wybierz parzyste elemety BBB 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 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> 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> 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> 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> 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> 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. 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”/> 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 > dla > i < dla <. 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> 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> 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> Jakub Wojciechowski PJWSTK 2002
Wszystko razem czyli przykład <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> Dokument XML z kursami akcji spółek giełdowych: 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 > 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> 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> Jakub Wojciechowski PJWSTK 2002
Dziękuje ??? Pytania ??? Jakub Wojciechowski PJWSTK 2002