Övning 8
I föregående kapitel fanns ett exempel med racerförare. Modifiera
xsl filen så att alla finländska förare sätts in
i en cell som har ljusblå bakrund och vit text.
Övning 9
Nedan finns två filer:
xml26_1.xml
<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="xml26_1.xsl"?>
<!DOCTYPE person [
<!ELEMENT person (data*)>
<!ELEMENT data (#PCDATA|lastname|firstname)*>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT firstname (#PCDATA)>
]>
<person>
<data>
Hans förnamn är <firstname>Kalle</firstname> och efternamnet är
<lastname>Anka</lastname>
</data>
<data>
Jag vet bara hans efternamn, som är <lastname>Persson</lastname>
</data>
<data>
Vet inte alls vad han heter
</data>
</person>
Öppna XML filen Öppna XML konverterad till HTML (Även NS)
xml26_1.xsl
<?xml version='1.0' encoding="iso-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<!-- matcha roten -->
<xsl:template match="/">
<!-- vanlig html -->
<html>
<head>
<title>Mixed Mode XML och XSL</title>
<style type="text/css">
h4 {font-family:verdana,arial,sans-serif; color:#666666;}
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h4>Detta är filens innehåll</h4>
<!-- använd templates som matchar pattern person/data -->
<!-- Obs. Måste inte loopa -->
<xsl:apply-templates select="person/data" /><br />
<!-- thats all, folks -->
</body>
</html>
</xsl:template>
<!-- template för data noder -->
<xsl:template match="data">
<!-- sätt in värdet -->
<xsl:value-of select="." /><br />
<!-- och kör templates på eventella undernoder -->
<xsl:apply-templates />
<hr />
</xsl:template>
<!-- template för firsname -->
<xsl:template match="firstname">
Förnamn : <xsl:value-of /><br />
</xsl:template>
<!-- template för lastname -->
<xsl:template match="person/data/lastname">
Efternamn : <xsl:value-of /><br />
</xsl:template>
</xsl:stylesheet>
Om du har IE 5.0 eller nyare kan du klicka här för att se filen i praktiken
Fundera och besvara följande frågor:
- Gör konstruktionerna
<xsl:value-of />
och
<xsl:value-of select="." />
samma sak?
- Varför behöver man inte loopa för att få alla data-noder?
- Vad händer om du i filen ändrar från :
<xsl:template match="data">
<xsl:value-of select="." /><br />
<xsl:apply-templates />
</xsl:template>
till
<xsl:template match="data">
<xsl:value-of select="." /><br />
<xsl:apply-templates select="lastname" />
<xsl:apply-templates select="firstname" />
<hr />
</xsl:template>
Vad har detta för betydelse?
Övning 10
Tag kopior av ovanstående filer och modifiera dem så att du bara
väljer den sista data noden.
Övning 11
Gör samma sak men välj endast första data noden.
Övning 12
Vi har redan sett några javascript-liknande funktioner på diverse
ställen, bland annat number(rating) och end(). En vanlig situation i presentationssammanhang
är formatering av nummer. Använd internet och/eller någon bra
bok för att se om det finns möjligheter att formattera siffror och
datum.
Skapa en valid XML fil och en XSL fil som demonstrerar skall innehålla
minst följande:
- formatering av nummer med tusenavdelare och två decimaler.
- formatering av datum
Du avgör själv hur stor eller liten fil som används för
att kunna testa detta. XML filen bör ha en DTD och XSL filen behöver
inte vara så märkvärdig.
Övning 13
I övning 7 på sidan xml12.asp så skapade
du ett förslag till en DTD för en vald websida. Gör nu resten,
d.v.s skapa en XML fil som innehåller datat på sidan samt en XSL
som kan visa sidan. Du får strippa bort eventuella rent dekorativa element,
men övrig information måste finnas kvar. Använd Mixed Mode XML. (Skyll dig själv om
du valde en för svår sida i Övning 7 - du hinner göra om
den innan jag samlar in övningarna.) Du vill kanske även ta en titt på
sidan xml_ex1.asp...
(Jag har avvaktat lite för att se om någon skulle
fråga om hur man får templates satt på sådant som inte
är noder, men överskattade tydligen er fantasi...)
Övning 14
Gör en alternativ XSL till XML filen i Övning 13.
Denna XSL fil skall bara visa de väsentliga sakerna i filen, d.v.s alla taggars information
men inte brödtexten (Se Texten om Mixed Mode XML)