Toon posts:

[xsl] lastig xsl-probleempje

Pagina: 1
Acties:

Verwijderd

Topicstarter
ok, ik heb de volgende xsl-template (let op: dit is maar een fragment van de gehele stylesheet):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  <xsl:template match="submit">
    <xsl:variable name="test">
        <xsl:element name="input">
          <xsl:attribute name="type"><xsl:text>submit</xsl:text></xsl:attribute>
          <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
        <xsl:attribute name="value"><xsl:value-of select="@label"/></xsl:attribute>
          <xsl:if test="@disabled='true'">
            <xsl:attribute name="disabled"><xsl:text>true</xsl:text></xsl:attribute>
          </xsl:if>
        </xsl:element>
      </xsl:variable>
      <xsl:call-template name="tableRow2">
        <xsl:with-param name="field" select="$test"/>
      </xsl:call-template>
  </xsl:template>

die roept de volgende template aan:
code:
1
2
3
4
5
6
  <xsl:template name="tableRow2">
    <xsl:param name="field"/>
    <tr>
    <td colspan="2"><xsl:value-of select="$field"/></td>
    </tr>
  </xsl:template>

Wat ik dus wil doen is:

Eerst wordt in de "submit" template een <input type="submit> tag opgebouwd... Dan wil ik die opgebouwde tag in een variabele stoppen en doorgeven aan tableRow2. Dit werkt alleen niet. De tableRow2 template wordt wel geoutput, maar de tag wordt niet meegegeven lijkt wel. Ik vraag me af of ik de juiste constructie gebruik en of het uberhaupt wel mogelijk is op deze manier.

tnx

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Mas*Mind:
code:
1
2
3
4
5
<xsl:variable name="test">
   <xsl:element name="input">
    ...
   </xsl:element>
</xsl:variable>
Een xsl:variable element mag alleen maar een name en een select attribuut hebben. Child elements zijn niet toegestaan. Op www.zvon.org staat een goede XSLT reference, waarin precies staat aangegeven wat toegestaan is in welke xsl elementen, erg makklijk :) .

Je zou op deze manier dan namelijk nog iets kunnen doen met output en zo templates toepassen op content waarop al templates zijn toegepast. Dat is iets wat onmogelijk is in XSLT.

Maar ja, dat lost je probleem niet op.... Ik zal even kijken hoe je dit dan zou kunnen doen.

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


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hum, eigenlijk is er niet echt een oplossing. Je zou alles wat nodig is kunnen meegeven aan een template die dus wat specifieker is. Dan krijg je echter bij de submit zo'n beetje een lege template...

Misschien dus gewoon even eenvoudig houden en de template uitschrijven?

Overigens: dat dit niet mogelijk is in XSL (vaker templates toepassen) is misschien jammer, maar het zorgt ook voor een lage complexiteit. De taal wordt er nogal wat makkelijker door... Het is wel jammer, want zo kan je dus nooit nog een transformatie uitvoeren op iets wat al gebruikt is.

Wat vaak een oplossing is in deze gevallen: maak een aparte XML file die een stukje gegeven bevat die eigenlijk ook nog getransformeerd moeten worden. Daarna kan je die erbij betrekken en de templates toepassen. In dit geval is dat echter niet echt nuttig denk ik.

In 'echte' transformatie-talen heb je dergelijke features wel (en nog veel meer), maar daardoor word de zaak wel eens stuk complexer. Ik ben de laatste tijd veel bezig met Stratego, een echte transformatie-taal. Ik zit er stiekem over te denken om eens te bekijken of ik wat componenten kan maken waardoor je in Stratego makkelijk transformaties op XML kan uitvoeren naar HTML....

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


Verwijderd

Topicstarter
thanks, ik zou anders niet weten hoe ik zo'n complexe tag eventjes in een variabele kan proppen...

Verwijderd

Topicstarter
sorry, las je 2e reply later dan dat ik de mijne neerpende...

Ik was er al bang voor dat het niet kon (tenminste: niet op een generieke manier) Inderdaad wel jammer, maar dan bak ik de html wel in elke template in. Zorgt er helaas wel voor dat het wat minder re-usable is.

Ik ben trouwens niet echt bekend met 'echte transformatie' talen. Is dat ook een taal gebaseerd op xml?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Mas*Mind: Ik was er al bang voor dat het niet kon (tenminste: niet op een generieke manier) Inderdaad wel jammer, maar dan bak ik de html wel in elke template in. Zorgt er helaas wel voor dat het wat minder re-usable is.
Misschien dat een XML ENTITY nog iets kan doen?
Ik ben trouwens niet echt bekend met 'echte transformatie' talen. Is dat ook een taal gebaseerd op xml?
Stratego is een taal die ook werkt via een universeel data type. Het is alleen iets netter dan XML. Atermen, het datatype van Stratego komt eigenlijk wel overeen met data-georienteerde XML. Stratego werkt onafhankelijk van de syntax waarin de gegevens zijn beschreven. Er zijn dus verschillende file-formats mogelijk. Op het moment is er een binaire en human-readable format. Momenteel zijn we erover aan het denken hoe we ook XML als format kunnen ondersteunen :) . Waarschijnlijk gaat dit gebeuren in combinatie met XSL en een XML Schema of DTD.

Als je er meer over wilt weten: www.stratego-language.org. De documentatie is helaas nog niet echt compleet en loopt iets achter op de huidige ontwikkeling. Er staan ergens anders nog betere slides. Als je het echt leuk vind zal ik die link nog ff plaatsen :) .

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

Pagina: 1