
604516cb1a7dd78a2e3184420d950f53.ppt
- Количество слайдов: 24
XSLT 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/> <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/> <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/> <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 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. w 3. 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=”wersja 1”> </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=”Nazwa. Szablonu”> 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ę 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 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=”warunek 1”>. . . </xsl: when> <xsl: when test=”warunek 2”>. . . </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=”szab 1”> <xsl: param name=”SIZE”/> <xsl: param name=”TYT” select=”brak”/> <xsl: value-of select=”$SIZE”/> </xsl: template> Wywołanie: <xsl: call-template name=”szab 1”> <xsl: with-param name=”SIZE”>40</xsl: with-param> <xsl: with-param name=”TYT”><xsl: value-of select=”/BB/@tytul”/> </xsl: with-param> Jakub Wojciechowski PJWSTK 2002 </xsl: call-template>
Wszystko razem czyli przykład <nasdaq> <company> <name>MSTF</name> <price>57. 69</price> Dokument XML z kursami <change>0. 02</price> <vol>31, 952, 100</vol> akcji spółek giełdowych: <link>http: //www. microsoft. com</link> </company> <name>ORACLE</name> <price>11. 90</price> <change>-2. 06</price> <vol>46, 174, 700</vol> <link>http: //www. oracle. com</link> </company> <name>SUNW</name> <price>4. 14</price> <change>-3. 52</price> <vol>82, 635, 500</vol> <link>http: //www. sun. com</link> </company> Jakub Wojciechowski PJWSTK 2002 </nasdaq>
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> <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> Jakub Wojciechowski PJWSTK 2002 </html> </xsl: template>
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
604516cb1a7dd78a2e3184420d950f53.ppt