Det grundlæggende
Det vigtigeste element i arbejdet med xslt er template elementet - det er det der beskriver hvad du vil have gjort:
Et lille eksempel
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Kunstner">
Kunstner fundet
</xsl:template>
</xsl:stylesheet>
Template elementet løber dit xml dokument igennem og hver gang den støder på et element der opfylder dit match vil indholdet af template elementet blive indsat. Kører man denne transformation på det lille xml dokument her, burde der komme en linje for hver kunstner, der står i dokumentet...
Prøv det lige... - resultatet er ikke helt som forventet!!
Arbejder du i XMLSpy kan det være meget nyttigt at bruge debug funktionen til at se, hvordan XSL fortolkeren virker.
Ja, output bliver..
<?xml version="1.0" encoding="UTF-8"?>W:\Digital musik\!Rytmisk\Dan Turèll +
Halfdan E\Glad i Åbningstiden\Dan Turèll + Halfdan E - .. (5).mp3.. (5)
Kunstner fundet
Glad i ÅbningstidenRock/Pop1314811W:\Digital musik\!Rytmisk\Caroline
Henderson\cinemataztic\Caroline Henderson - Untill we meet again.mp3Untill we
meet again
Kunstner fundet
cinematazticJazz1023170W:\Digital musik\!Rytmisk\Dan Turèll + Halfdan E\Glad i
Åbningstiden\Dan Turèll + Halfdan E - .. (1).mp3.. (1)
Kunstner fundet
Glad i ÅbningstidenRock/Pop529126W:\Digital musik\!Rytmisk\Dan Turèll + Halfdan
E\Glad i Åbningstiden\Dan Turèll + Halfdan E - .. (3).mp3.. (3)
Kunstner fundet
Glad i ÅbningstidenRock/Pop932940W:\Digital musik\!Rytmisk\U2\Rattle and Hum\U2
- Freedom for My People.mp3Freedom for My People
Kunstner fundet
Rattle and HumRock/Pop738452W:\Digital musik\!Rytmisk\Mark Knopfler\Cal\Mark
Knopfler - Waiting for Her.mp3Waiting for Her
Kunstner fundet
CalRock/Pop340202W:\Digital musik\!Rytmisk\U2\Rattle and Hum\U2 - The Star
Spangled Banner.mp3The Star Spangled Banner
Kunstner fundet
Rattle and HumRock/Pop1543075W:\Digital musik\!Rytmisk\The Blues
Brothers\Briefcase Full of Blues\The Blues Brothers - Closing- I Can't Turn You
Loose.mp3Closing: I Can't Turn You Loose
Kunstner fundet
osv...
Default templates
Det giver lejlighed til at tale lidt om default templates. Hvis vi ikke leverer en template, der matcher med rod elementet i xml dokumentet vil xml parseren bruge en default template, der "bare" leverer indholdet af det pågældende element.
Output
Et andet problem vi ser er bogstaverne (i nogle tilfælde bliver de danske bogstaver ikke vist rigtigt)...
Det hænger sammen med at parseren pr. default bruger UTF-8. Det problem kan løses ved at skyde denne linje ind i toppen af stylesheetet:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="ISO-8859-1" />
<xsl:template match="Kunstner">
Kunstner fundet
</xsl:template>
</xsl:stylesheet>
Noget der virker :-)
Og skal det give det output vi forventer kan det se sådan her ud - det virker måske lidt magisk lige nu, men det skal nok give mening når vi kommer lidt længere:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="ISO-8859-1" />
<xsl:template match="Kunstner">
Kunstner fundet
</xsl:template>
<xsl:template match="text() | @*"></xsl:template>
</xsl:stylesheet>
Der giver
Kunstner fundet
Kunstner fundet
Kunstner fundet
Kunstner fundet
Kunstner fundet
Kunstner fundet
Og et lidt sjovere eksempel
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="ISO-8859-1" />
<xsl:template match="Kunstner">
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="text() | @*"></xsl:template>
</xsl:stylesheet>
Der gerne skal give
Dan Turèll + Halfdan ECaroline HendersonDan Turèll + Halfdan EDan Turèll + Halfdan EU2Mark KnopflerU2The Blues BrothersThe Blues BrothersDan Turèll + Halfdan EQueenMark KnopflerDan Turèll + Halfdan EQueenQueenQueenQueenMark KnopflerQueenDan Turèll + Halfdan EQueenSting
Ikke specielt sexet, men dog alligevel noget :)