Najprostszy przykład użycia XSLT to hostowanie pliku XML. Nie chcemy wyświetlać go bezpośrednio użytkownikowi, dlatego decydujemy się na prostą transformację do HTML-a. W tym celu w drugiej linii XML-a umieszczamy link do transformaty.
<?xml version="1.0"?> <?xml-stylesheet href="mytransform.xsl" type="text/xsl"?>
Szablon powinien składać się z tzw. template'ów czyli fragmentów kodu dopasowanych do elementów XML-a, które mają one przetwarzać. Przykładowo template, który zastosuje się do roota XML-a:
<xsl:template match="/"> <html> <body> <h2>My books</h2> <xsl:apply-templates/> </body> </html> </xsl:template>
Instrukcja apply-templates spowoduje wykonanie się pozostałych szablonów pasujących do elementów wewnątrz root-a. Wewnątrz tego pliku mamy jeszcze zdefiniowany szablon pasujący do elementów typu catalog.
<xsl:template match="catalog"> <table> <thead> <tr> <th>Title</th> <th>Author</th> <th>Price category</th> </tr> </thead> <xsl:for-each select="book"> <xsl:if test="./attribute::id != $hiddenId"> <tr> <td> <xsl:value-of select="title" /> </td> <td> <xsl:value-of select="author" /> </td> <td> <xsl:choose> <xsl:when test="price > 10 and price < 50"> cheap </xsl:when> <xsl:when test="price > 50 and price < 100"> medium </xsl:when> <xsl:otherwise>expensive</xsl:otherwise> </xsl:choose> </td> </tr> </xsl:if> </xsl:for-each> </table> </xsl:template>
Szablon taki buduje tabelę przechodząc po wszystkich elementach typu book za pomocą instrukcji for-each. Mamy także do dyspozycji dwie instrukcje sterujące: prostszą xsl-if (sprawdza tylko, czy dany fragment kodu ma się wykonać) oraz bardziej złożoną xsl-choose (z uwzględnieniem wielu warunków, odpowiada switchowi z języka C). Zapis ./ oznacza odwołanie do obecnie przetwarzanego elementu, natomiast poprzez /attribute::nazwa możemy wyciągać wartości z atrybutów. XSLT pozwala także na definiowanie własnych zmiennych, do których odwołujemy się przez $zmienna, np.
<xsl:variable name="hiddenId" select="'bk101'"/>
Brak komentarzy:
Prześlij komentarz