Avatar billede Daniel.E Praktikant
21. marts 2005 - 16:21 Der er 13 kommentarer og
1 løsning

templates - hjælp til forståelse

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>

<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>

<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

</xsl:stylesheet>


Ok.. jeg fatter ikke det her..  :/

jeg synes ikke det er logisk at den øverste template har noget at gøre med de andre.  I mit hovedet kræver det en reference, og den mangler. 

Jeg kan ikke se hvordan de forskellige template kan have noget med hindnaden at gøre. 

er der en tålmodig sjæl som kan fortælle mig dette ???
Avatar billede Daniel.E Praktikant
21. marts 2005 - 16:22 #1
Denne linie <xsl:apply-templates select="artist"/> har åbenbart noget at gøre med:

<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>


eller sagt på en anden måde, så på macth være den som i mot hovedet er en reference.. men det er lige det som der går galt for mig..
Avatar billede Daniel.E Praktikant
21. marts 2005 - 16:22 #2
kan først kigge på det i morgen engang, eller senere i aften.. så håber i holder øje med spørgsmålet :)
Avatar billede atoft Nybegynder
21. marts 2005 - 22:10 #3
den første som bliver kaldt er den med match="/"
din xsl:apply-templates under søger om den kan finden en template som matcher elementet fx cd. Hvis der ikke findes en template som matche kaldes en indbygget template som svarer til value-of på elementet.

En apply-template med select="title" vil lave en collection af de title-elementer som findes under den givne kontekst her sikkert kun en og derefter kalde xsl:template som har en match på elementet navnet. Bemærk at templaten er kaldt en gang for hver element i collection'en - i dette tilfælde kun en gang.

Håber det giver mening for dig.
Avatar billede atoft Nybegynder
21. marts 2005 - 22:12 #4
så en apply-templates kan ses lidt som et kald til funktionen xsl:template hvor der er match mellem elementerne.
Avatar billede Daniel.E Praktikant
22. marts 2005 - 00:13 #5
skal jeg forstå det sådan at:


apply-templates sætter de forskellige template tilrådighed, hvis der kommer et eller flere tags som matcher på templaten ??
Avatar billede atoft Nybegynder
22. marts 2005 - 08:43 #6
Ja apply-templates kalder ud for at se om der er en template som matcher det/de elementer den kalder ud med.
Avatar billede Daniel.E Praktikant
22. marts 2005 - 08:45 #7
<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>

Den her...

er det ikke lidt det samme som:

<xsl:template match="cd">
<p>
include "title"
include "artist"
</p>
</xsl:template>


hvis du forstår hvad jeg mener....
Avatar billede atoft Nybegynder
22. marts 2005 - 08:47 #8
Jo næsten for hvis du ikke har et title element under dit cd elementer vil title ikke blive kaldt, det samme gælde for artist
Avatar billede Daniel.E Praktikant
22. marts 2005 - 08:47 #9
jeg forstår ikke helt brugen af apply-template.. fordi disse har den ikke f.eks..

<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

Men denne har...

<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>

og denne

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>


Hvordan ved jeg hvilken en som er start punktet... eller tænker jeg bare for meget ANSI C lige nu... hehe
Avatar billede Daniel.E Praktikant
22. marts 2005 - 08:54 #10
nåååå....... jeg tror jeg har en tanke.. hehe :)

<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>

er det ikke lidt det samme som at sige.

At vi laver et reglsæt af de forskellige templates, som bliver en stort samlet match points.  I dette tilfælde skal X-path se sådan ud: //cd/artist eller //cd/title. 

Men hva så med de 2 andre templates....  kan de også blive matchede.... ?
Avatar billede atoft Nybegynder
22. marts 2005 - 08:56 #11
Når du starter din transformering står du altid med root noden i hånden og den matcher match="/" så her starter du.

Under din root node har du nogle child nodes liggende jeg vil gætte på de hedder cd i dit dokument. <xls:apply-templates> samler disse cd noder og kalder templaten som har match på cd, en gang for hver cd element.

I cd templaten kalder du ud til title templaten med xsl:apply-templates select="title" havde en cd haft 2 title elementer var "template match='title'" blevet kaldt 2 gang. Men du har sikkert kun en.

I den title template ønsker du ikke at fortage yderligere derfor ikke flere apply-templates her. Havde du haft elementer under title du ville behandle skulle du have en apply-templates i title tempalten.
Avatar billede Daniel.E Praktikant
22. marts 2005 - 09:01 #12
:)
Avatar billede Daniel.E Praktikant
22. marts 2005 - 09:02 #13
takker for hjælpen.  Jeg skulle mene jeg er med nu.  Sidder også allerede og experimentere lidt. :)
Avatar billede atoft Nybegynder
22. marts 2005 - 09:04 #14
for at gøre det mere læsevenligt kunne du i match="/" templaten

lave <xsl:apply-templates/> om til

<xsl:apply-templates select="cd"/>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester