[XML/XSL] De juiste manier?

Pagina: 1
Acties:

  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
Ik heb al een weekje bezig met xml/xsl dus weet nog bijna niets, maar ik wil het wel gelijk goed leren, vandaar de vele vragen van mij betreffende xml/xsl.

Ik heb al begrepen dat het gebruik van 'for each' zoveel mogenlijk vermeden moet worden.

Zover ik alles goed begrepen heb is een goede manier om templates te maken deze:
code:
1
2
3
4
5
<xsl:template match="username">
 <font face="Verdana" size="1" color="#cc3300">
  <xsl:apply-templates/>
 </font>
</xsl:template>

Maar hoe kan ik xml data door elkaar heen gebruiken, ik zal het proberen uit te leggen.

Ik heb zeg maar deze xml file:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<forum>
 <thread>
  <id>1</id>
  <name>Piet</name>
  <subject>test subject 1</subject>
 </thread>
 <thread>
  <id>2</id>
  <name>Klaas</name>
  <subject>test subject 2</subject>
 </thread>
</forum>

en ik wil hier deze html van maken:
code:
1
2
<a href="default.asp?id=1">test subject 1</a> (Piet)
<a href="default.asp?id=2">test subject 2</a> (Klaas)

Ik heb nu dit, maar verder kom ik niet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html"/>
        
<xsl:template match="thread">
 <html>
  <head>
   <title>Forum</title>
  </head>
    
  <body>
   <xsl:apply-templates/>
  </body>
 </html>
</xsl:template>
    
<xsl:template match="subject">
 <a href="#"><xsl:apply-templates/></a>
</xsl:template>

</xsl:stylesheet>

Kan iemand me verder helpen of weet iemand waar goed uitgelegt word hoe en wat, ik heb al bergen sites afgebladerd maar ze leggen of uit wat xml/xsl is en komen met echt hele simpele voorbeelden of het is gelijk weer onbegrijpenlijk voor mij.

weinig tot niks..


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je kan dit op twee manieren aanpakken. 1 is handig, 2 iets minder handig ;) .

Je kan een template een 'mode' attribute geven. Je kunt daarna apply-templates aanroepen met een mode, waardoor alleen templates in die mode worden gematched. Dit kan je gebruik om eerst de link in te voegen en daarna de naam (je werkt dan dus met twee modes). Eigenlijk is dit niet handig in dit geval. Modes gebruik ik eigenlijk alleen om te zorgen dat je voor een element twee (of meer) keer iets verschillends kan opleveren. Dat is in dit geval niet nodig :) .

Je moet ff goed bekijken wat je probleem is. In dit geval wil je eerst het subject en daarna de naam opleveren. Als je dan vanuit thread apply-templates aanroept zonder select argument komen de resultaten echter altijd in de oorspronkelijke volgorde. Dat gaat dus niet werken :) .

Een mogelijke oplossing is deze (niet getest dus er kan een klein foutje in zitten):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<xsl:template match="forum">
    <html>
        <head>
        <title>Forum</title>
        </head>
    
        <body>
            <xsl:apply-templates select="thread"/>
        </body>
    </html>
</xsl:template>

<xsl:template match="thread">
    <a href="default.asp?id={id/text()}">
        <xsl:value-of select="subject/text()"/>
    </a>
    (<xsl:value-of select="name/text()"/>)
    <br/>
</xsl:template>

Nu krijg je alle links in 1 pagina (bij de jouwes zou je meedere HTML elementen krijgen). Met behulp van value-ofs vul ik de data in. Merk het gebruik van { } op in het attribuut href.

Op zich is hier niet mis mee, maar het kan ook met templates:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<xsl:template match="forum">
    <html>
        <head>
        <title>Forum</title>
        </head>
    
        <body>
            <xsl:apply-templates select="thread"/>
        </body>
    </html>
</xsl:template>

<xsl:template match="thread">
    <a href="default.asp?id={id/text()}">
        <xsl:apply-templates select="subject"/>
    </a>
    (<xsl:apply-templates select="name"/>)
    <br/>
</xsl:template>

    
<xsl:template match="subject">
    <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="name">
    <xsl:value-of select="."/>
</xsl:template>

Het voordeel hiervan is dat het wat beter aan te passen is als je nog substructuur gaat introduceren in name of in name bijvoorbeeld een attribuut id opneemt die verwijst naar andere XML bron.

Verder zijn hier de templates voor subject en name eigenlijk overbodig omdat de default-templates hier al zouden worden toegepast, die het goede resultaat opleveren :) .

Ik hoop dat ut een beetje duidelijk is :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
PS: leuke vraag trouwens :) . Het is wel leuk om te zien dat steeds meer mensen met XML/XSL aan de gang gaan :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Owh ja, nog een opmerking: die /text() die ik gebruik in het xsl:value-of select attribuut is niet verplicht, maar ik vind het zelf wel duidelijk. Je kan dus ook gewoon xsl:value-of select="name" schrijven.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
Op maandag 01 oktober 2001 11:56 schreef mbravenboer het volgende:
PS: leuke vraag trouwens :) . Het is wel leuk om te zien dat steeds meer mensen met XML/XSL aan de gang gaan :) .
Bedankt voor je antwoord, ja ik zie nu toch het net in van XML maar het is wel ff wennen als je jaren alleen ASP/HTML hebt gedaan. Ik vind het dus zo jammer dat er niets te vinden is qua documentatie, alleen te makkelijk (echt de basics) of gelijk weer moeilijk met lange voorbeelden waar ik nog niets van begrijp.

Wat is bijvoorbeeld een goed boek waar alles stap voor stap word uitgelegd, ik heb al Professional XML van Wrox maar ik moet nog echt een beginners boek hebben.

weinig tot niks..


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
didio: Ik vind het dus zo jammer dat er niets te vinden is qua documentatie, alleen te makkelijk (echt de basics)
Kijk eens naar de uitermate goede XSL tutorial op http://www.xfront.com . Eigenlijk is dat de enige tutorial die ik ooit heb gelezen over XSL. Daarna red ik mezelf met de W3C standaarden. Die tutorial begint echt heel erg basic en na het lezen van die tutorial zou je dit hierboven echt zo uit je mouw kunnen schudden. XSL is ook zeker niet triviaal omdat het in feite een vrij wetenschappelijk concept (term-rewriting, structurele recursie, pattern matching) naar de 'gewone' wereld brengt (overdreven gezegd).
of gelijk weer moeilijk met lange voorbeelden waar ik nog niets van begrijp.
Begreep jij mijn antwoord wel goed? Anders moet je ff zeggen wat onduidelijk is, dan leg ik dat nog ff uit.
Wat is bijvoorbeeld een goed boek waar alles stap voor stap word uitgelegd, ik heb al Professional XML van Wrox maar ik moet nog echt een beginners boek hebben.
Ik niet echt een goed boek eigenlijk. Ik zag vanmorgen op de W3C site wel een nieuw boek staan, maar die ken ik dus niet. Op zich denk ik dat je je met de betere tutorials goed zou moeten kunnen redden... Diegene die ik eerder noemde is een absolute aanrader. Dat boek van wrox vind ik trouwens ook wel errug goed.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
Op maandag 01 oktober 2001 12:38 schreef mbravenboer het volgende:
Begreep jij mijn antwoord wel goed? Anders moet je ff zeggen wat onduidelijk is, dan leg ik dat nog ff uit.
Nee nee, ik begrijp jouw voorbeeld wel, maar ik heb wel eens voorbeelden gezien op internet waar ik echt niets van gegrijp. Ik ga die site zo eens opzoeken waar je het over had. Heel erg bedankt dat je je zo inzet voor XML en altijd goede antwoorden geeft.

weinig tot niks..


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
didio: ik begrijp jouw voorbeeld wel, maar ik heb wel eens voorbeelden gezien op internet waar ik echt niets van gegrijp.
Ok, mooi zo :) . Die andere voorbeelden waren dan vast geen goede voorbeelden ;) .
Heel erg bedankt dat je je zo inzet voor XML en altijd goede antwoorden geeft.
Hehe :) Ik doe het met plezier... Ik houd van mooie technieken en mensen die die mooie technieken gebruiken ;)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1