Avatar billede Daniel.E Praktikant
11. marts 2005 - 11:34 Der er 9 kommentarer og
2 løsninger

hvorfor sådan og ikke sådan med xsl vedr templates

Hej

Jeg har følgende spørgsmål til XSLT:

Hvorfor sådan her:

<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="/source">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="AAA">
    <div style="color:purple">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
    </div>
</xsl:template>


</xsl:stylesheet>

Og ikke sådan her:

<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="AAA">
    <div style="color:purple">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
    </div>
</xsl:template>


</xsl:stylesheet>



XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="aa.xsl"?>

<source>

<AAA id="a1" pos="start">
    <BBB id="b1"/>
    <BBB id="b2"/>
</AAA>
<AAA id="a2">
    <BBB id="b3"/>
    <BBB id="b4"/>
    <CCC id="c1">
          <DDD id="d1"/>
    </CCC>
    <BBB id="b5">
          <CCC id="c2"/>
    </BBB>
</AAA>

</source>

Resultatet er det samme:

AAA id=a1
AAA id=a2
Avatar billede Daniel.E Praktikant
11. marts 2005 - 11:38 #1
Jeg ved at der findes mange forskellige metoder til at opnå det samme med.. men denne her er lidt underlig synes jeg..
Avatar billede articfruit Nybegynder
11. marts 2005 - 12:41 #2
ved den første metode har du mulighed for at tilgå evt. andre tags end <AAA></AAA>, det har du ikke i andet eksempel...
Avatar billede articfruit Nybegynder
11. marts 2005 - 12:55 #3
uddybning: Du kan selvfølglig godt tilgå undertags under <AAA></AAA> i begge tilfælde men du vil ikke kunne tilgå andre tags på samme niveau som <AAA></AAA> i eksempel nr. 2...
Avatar billede Daniel.E Praktikant
11. marts 2005 - 13:22 #4
jeg forstå det ikke. 

Er den ene metode mere rigtig end den anden.  ??

Er det bare 2 forskellige metoder til det samme, hvor den første har mulighed for mere end den anden ??

Det som den første kan, er det noget som kan blive nødvendigt.. eller er det også bare noget som "DE" har tilføjer for the fun off it ??
Avatar billede Daniel.E Praktikant
11. marts 2005 - 13:25 #5
<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="/source">
    <xsl:apply-templates/>
</xsl:template>

Det er de har 2 som gør mig forvirret.  Fordi at der ingen grund er til dem i mit hovedet.  Jeg ser dem som fyld og xtra kode for ingenting.

Det beskriver måske mere hvad mit problem er.
Avatar billede articfruit Nybegynder
11. marts 2005 - 13:28 #6
min fejl,kiggede ikke lige på det hele...
Avatar billede articfruit Nybegynder
11. marts 2005 - 13:31 #7
der er ikke nogen forskel på dine to eksempler, for du laver nøjagtigt det samme... Du laver en match på <AAA> i begge tilfælde!

<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="/source">
    <xsl:apply-templates/>
</xsl:template>

>> kan du blot undlade at skrive, der laver du blot et match som du ikke bruger nogen steder... det svarer lidt til at lave et udtræk fra en database, uden at bruge resultatet af udtrækket til noget...
Avatar billede Slettet bruger
11. marts 2005 - 13:58 #8
Forklaringen er faktisk at XSLT har nogle indbyggede templates som bruges når der ikke er defineret nogen - det første der sker er at processoren leder efter en template der matcher roden (match="/") - hvis den ikke findes, bruges en indbygget:

<xsl:template match="*|/">
  <xsl:apply-templates />
</xsl:template>

Derfor er det som regel tilstrækkeligt at lave en template der matcher det man vil have ud.

/CS
Avatar billede Daniel.E Praktikant
11. marts 2005 - 14:09 #9
<xsl:apply-templates />

er der en som kan give en forklaring på denne linie.. fordi nu bliver jeg lidt forvirret...
Avatar billede janegil Nybegynder
11. marts 2005 - 15:39 #10
<xsl:apply-templates />:
I template for AAA er det ingen xsl:apply-templates, hvilket betyr at BBB inne i AAA ikke transformeres.

Hvis du inkluderer xsl:apply-templates, vil BBB blir transformert av en default template, hvis ikke du skriver din egen til å matche BBB.
Avatar billede Daniel.E Praktikant
14. marts 2005 - 14:56 #11
tak for hjælpen gutter
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