[XML/XSL] Include/Import

Pagina: 1
Acties:

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

didio

didio.nl

Topicstarter
Ik begin het al aardig door te krijgen dat xml/xsl maar wat we nog niet lukt is include of import van xsl files.

Ik krijg steeds dezelfde error.

Ik heb bijvoorbeeld:
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
<?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="forum">
 <html>
  <head>
   <title>Forum</title>
  </head>
        
  <body>
   <xsl:apply-templates select="name"/>
  </body>

 </html>
</xsl:template>

<xsl:import href="include.xsl"/>
<xsl:template match="subject">
 <xsl:apply-imports/>
</xsl:template>

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

</xsl:stylesheet>

en krijg dan deze error:
code:
1
Keyword xsl:import may not be used here.

weinig tot niks..


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Import moet vooraan in de stylesheet staan (ik denk voor of na de output, dat wat ik niet zeker). Ik doe het altijd erna.

Uit de laatste slide van deel 2 van de tutorial op www.xfront.com :
With xsl:include the stuff that is macro-substituted into the stylesheet has the same precedence as the rest of the stylesheet. It is as though you had one stylesheet.

With xsl:import the stuff that is macro-substituted into the stylesheet has lower precedence than the rest of the stylesheet. Also, all xsl:import elements must come first in the stylesheet.

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


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik zou trouwens absoluut geen apply-imports gebruiken, tenzij je daar echt niet omheen kan. Je moet die alleen gebruiken als een template uit je imports overriden is en je de overriden template (originele dus) wilt gebruiken. Normaal gesproken heb je dat niet nodig...

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
Aah ja ja er begint iets te werken.

Wat ik eigenlijk zou willen doen, is grote stukken html in een include of import willen zetten en die dan includen op bepaalde plekken, als ik die import bovenaan zet dan laat hij dat perfect zien, maar de rest van de stylesheet voert ie niet meer uit.

weinig tot niks..


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Bij een import worden de templates uit de geimporteerde stylesheets bij de huidige templates gevoegd. Al je huidige templates hebben voorrang op de geimporteerde templates, maar als er in de file geen template matched, wordt een template uit de import genomen (als die wel matched uiteraard ;) ). Het hangt dus sterk van je templates af welke wel en niet gekozen worden.

Je moet steeds in de gaten houden dat XSL in feite alleen maar het herschrijven van delen van de XML boom is op een recursieve manier. Steeds wordt er in de huidige knoop gekeken welke herschrijf-regels toegepast moeten worden...

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


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
didio: Wat ik eigenlijk zou willen doen, is grote stukken html in een include of import willen zetten en die dan includen op bepaalde plekken
Je kan alleen maar XSL stylesheets includen dus ik snap eigenlijk niet wat je bedoelt nu ik het nog even beter doorlees... Je kunt alleen templates toevoegen aan je huidige file.
als ik die import bovenaan zet dan laat hij dat perfect zien, maar de rest van de stylesheet voert ie niet meer uit.
Zie daarvoor m'n vorige post :) .

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 dinsdag 02 oktober 2001 12:51 schreef mbravenboer het volgende:
Je kan alleen maar XSL stylesheets includen dus ik snap eigenlijk niet wat je bedoelt nu ik het nog even beter doorlees... Je kunt alleen templates toevoegen aan je huidige file.
Ik wil dus eigenlijk grote stukken html die in mijn xsl file moeten komen in een soort include zetten zodat ik dat kan hergebruiken. Dit zijn dus stukken html die tussenm de body tags moet komen. Anders moet ik voor elke xsl file die html weer opnieuw erin moeten zetten. Is hier een mogenlijkheid voor?

Het includen van templates begrijp ik nu, en werkt ook, thanks

weinig tot niks..


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hum goede vraag... Ik heb geen idee :) . Het wordt ook lastig denk ik, omdat de HTML code meestal doorspekt zal zijn met value-ofs en apply-templates.

Je zou misschien met wat linking standaarden ergens komen, maar ik denk niet dat dat op gaat schieten.

Ik zou gewoon goed nadenken over het design van mijn XSL files. Als het goed is heb je dan geen herhaling nodig.

Je kunt trouwens ook named templates maken die nergens op matchen. Die kan je dan gewoon aanroepen met eventueel een argument (als een soort methode dus). Wellicht dat je daar het een en ander mee kan doen.

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 dinsdag 02 oktober 2001 13:47 schreef mbravenboer het volgende:
Je kunt trouwens ook named templates maken die nergens op matchen. Die kan je dan gewoon aanroepen met eventueel een argument (als een soort methode dus). Wellicht dat je daar het een en ander mee kan doen.
Dit werkt dus, ik kan dus een named template maken in een include file en die op een bepaalde plek invoegen. Ik vind dat xsl steeds leuker worden :9

weinig tot niks..


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
didio: Dit werkt dus, ik kan dus een named template maken in een include file en die op een bepaalde plek invoegen. Ik vind dat xsl steeds leuker worden :9
Mooi :) .

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


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik moet mezelf even corrigeren... |:(

Ik was in de veronderstelling (nooit dingen veronderstellen ;) ) dat apply-imports een select attribuut kan hebben, waardoor het dezelfde functie krijgt als apply-templates. In dat geval zou ik die functie absoluut niet fraai vinden.

Gelukkig blijken de ontwerpers van XSL het heel anders bedacht te hebben :) . Nu ik het zelf nodig heb zie ik dat apply-imports helemaal niet zo werkt. apply-imports heeft geen select attribuut en kan alleen toegepast worden op de huidige knoop. Het roept de overriden template aan en heeft dus in feite dezelfde functie als super() in veel andere programmeertalen.

Met apply-imports is wat mij betreft dus niets mis! :) .

(waarom corrigeerde niemand me ;) )

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


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op zondag 07 oktober 2001 22:27 schreef mbravenboer een correctie en:
(waarom corrigeerde niemand me ;) )
Omdat er niet zo erg veel mensen met XSL aan het spelen zijn.

:+

Verwijderd

Het lukt me nog steeds niet om zo'n import of include te doen als je web-applicaties maakt met ASP. Ik laadt daar via DOM een XSL stylesheet in, en in dat sheet staat een include of import (die client side WEL werkt!, <xsl:include href="browsedetail.xsl" />) maar dat gaat niet goed! hij zegt:

Soort fout:
msxml3.dll (0x800C0006)
Kan het opgegeven object niet vinden.

terwijl het stylesheet zich in dezelfde dir bevindt als het origineel! Ik heb het ook al met een URL geprobeerd... no luck!

Verwijderd

client side gebruik je waarschijnlijk IE, en die gebruikt een andere XML parser dan jij op de server gebruikt. Geef eens het absolute pad op, werkt het dan wel?
Pagina: 1