Zastosowanie arkuszy XSLT
Przydatne wyrażenia ścieżkowe:
/ -> odwołanie do korzenia dokumentu. Np. /ElementGlowny
// -> odwołanie do dowolnego (bezpośredniego lub dalszego) potomka bieżącego elementu;
./ -> odwołanie do bieżącego węzła;
@nazwa1 -> atrybut bieżącego węzła noszący nazwę „nazwa1”;
@* -> dowolny („pierwszy z brzegu”) atrybut bieżącego węzła;
@*[2] -> atrybut bieżącego węzła występujący jako drugi w kolejności;
To indeksowanie przydatne jest raczej dla podelementów, gdyż jak pamiętamy, kolejność atrybutów wg specyfikacji nie jest znacząca. A więc np.
/igrzyskaOlimpijskie/dyscyplina[2]
to drugi z kolei element „dyscyplina”.
Odwołanie w pliku XML do arkusza stylów:
<?xml-stylesheet type="text/xsl" href="naszArkusz.xsl" ?>
Budowa arkusza XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
...
</xsl:template>
...
</xsl:stylesheet>
Specyfikowanie rodzaju dokumentu wyjściowego (można pominąć, jeśli to HTML):
Po znaczniku otwierającym arkusza (xsl:stylesheet) umieszczamy:
<xsl:output method=”html” media-type=”text/html” />
<xsl:output method=”xml” media-type=”text/xml” />
<xsl:output method=”text” media-type=”text/txt” />
Dla przykładowego pliku Sydney2000.xml XML spróbuj “podłączyć” doń pusty arkusz stylów.
Wewnątrz głównego szablonu (match=”/”) wpisz dowolny tekst lub kod HTML i sprawdź efekt.
Następnie zamieść w tym szablonie element-polecenie <
xsl:apply-templates />. Uruchomi to przetwarzanie całego pliku (bo na początku znajdujemy się domyślnie w korzeniu, a nie podaliśmy innego punktu startowego atrybutem
select) – co robi przeglądarka dla zawartości, dla której nie ma szablonu?
Sposoby definiowania przekształceń
Jedną z metod realizacji przekształceń jest umieszczenie wszystkich poleceń w tym jednym szablonie.
Spróbuj wyświetlić w postaci listy HTML (znaczniki <ul> -> lista nienumerowana; <li> ->
element listy) albo w postaci tabelarycznej (znacznik <table>, nagłowek kolumny: <th>, wiersz kolumny: <tr>, komórka <td>) wybrane pozycje z pliku XML.
Jeśli pozycje te się powtarzają, zastosuj polecenie:
<xsl:for-each select=’ścieżka_do_powtarzajacych_sie_elementow’ >
… Ozdobniki i znaczniki HTML;
Pobranie danych: <xsl:value-of
select=’sciezka_wzgledem_bieżącego_elementu’>
</xsl:for-each>
Gdy korzystamy z instrukcji
xsl:for-each, możemy skorzystać z mechanizmu sortowania, umieszczając w jej wnętrzu, jako pierwszą pozycję element
<xsl:sort select=’lokalna- scieżka-do-danej-wg-której-sortujemy’ />Numeracja oraz sortowanie+numeracja
Jeśli chcemy ponumerować pozycje wyświetlane w instrukcji xsl:for-each, możemy skorzystać z polecenia <xsl:number />
W wypadku jednak, gdy dane pochodzą z różnych węzłów
Najczęściej spotykamy swoistą dekompozycję reguł: uruchamianie z szablonu głównego innych pasujących szablonów:
używamy polecenia
xsl:apply-templates, ewentualnie z atrybutem
select=scieżka, określającym punkt startowy (kontekst). Z kolei wybór pasującego w danym kontekście szablonu opiera się na wartości atrybutu „
match” w elemencie
xsl:template.
…
Wołanie konkretnego, nazwanego szablonu:
Służy temu polecenie xsl:call-template. Możemy zastosować ten mechanizm do szablonu, który w zależności od podanego parametru wyświetlałby złotych, srebrnych lub brązowych medalistów.
Przekształcenia XML
Możemy konstruować nowe elementy XML. Można to zrobić albo statycznie:
<naszElement> … </naszElement>
Albo w oparciu o dane dostępne podczas przetwarzania. Wówczas trzeba użyć konstrukcji
<xsl:element name=nazwaElementu> … </xsl:element>
Podobnie w przypadku konstruowania atrybutów:
<xsl:attribute name="nazwaAtrybutu">
<xsl:value-of select='./@nazwaAtrŹródłowego' />
</xsl:attribute>
Aby zobaczyć efekty, może być konieczne skorzystanie z procesora stylów Xalan. Należy go pobrać z katalogu naszych ćwiczeń, rozpakować.
Wołamy z katalogu zawierającego nasze pliki XML, poleceniem (linia komend):
java org.apache.xalan.xslt.Process -IN zrodlo.xml -XSL arkusz.xsl -OUT wynikowy.xml