DevTrain Startseite Visual Studio 1 Magazin  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Andreas Rauch Artikel Drucken
        
Weitere Möglichkeiten der Variablen in XSL: xsl:param

Als Entwickler findet man die Möglichkeiten von Variablen sehr zu schätzen. Auch wenn es dem Gedanken einer Auszeichnungssprache wiederspricht, so hat man dennoch zwei Möglichkeiten: xsl:variable und xsl:param. Einige Möglichkeiten von xsl:variable habe ich beireits in dem Artikel beschreiben http://www.devtrain.de/news.asp?artnr=461. Den originalen Charakter einer Variablen haben aber beide nicht, sondern eher den einer Konstanten oder besser gesagt einer Entität.

Wenn man von xsl:param spricht muss man auch von xsl:with-param sprechen, da beide sehr eng miteinander arbeiten. Bei der Benutztung von beiden kommt man schon eher an den Gedanken einer Variablen heran. Die Werte die xsl:param zugewiesen werden, können z.B in einem Template verwendet werden, das mit xsl:call-template wieder aufgerufen werden kann.


Der Wert des xsl:param ist ein Standard Wert, der auch wieder überschrieben werden kann.

Zunächst einmal...wie verwendet man die xsl:param. Genauso wie xsl:variable!  

<xsl:param name="NamedesParameters">
         <xsl:value-of select="ReferenzierterWert"/> '  --> XPATH
</xsl:param>

xsl:param kann nur unter folgenden Knoten, dafür aber beliebig oft, eingefügt werden:

xsl:stylesheet, xsl:template, xsl:transform.

Sehen wir uns bei der Gelegeheit auch gleich mal xsl:with-param an:

xsl:with-param wird innerhalb von xsl:call-template oder xsl:apply-templates verwendet. Der Wert im Attribut name ist der Verweis auf die das xsl:param und übergibt dem Template neue Werte.

<xsl:call-template name="templatename">
    <xsl:with-param name="namedesxsl:param">neuerWert</xsl:with-param>
</xsl:call-template>

Auch hier gilt: Parent Knoten müssen sein:

xsl:apply-templates, xsl:call-template

So kommen wir nun zu einem Beispiel:

Hier unsere XML Daten:

<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="xslparam.xsl"?>
<xslparam>
   <Kongress>
      <datum>ASP-net Konferenz</datum>
      <datum>findet</datum>
      <Kongress>
         <datum>vom 20.Juni</datum>
         <datum>bis</datum>
         <datum>21. Juni</datum>
      </Kongress>
      <datum>statt</datum>
   </Kongress>
</xslparam>

und hier unser xsl File:

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

<xsl:template match="Kongress/datum"> 
   <br/>
   <xsl:call-template name="Nummerierung"/>
</xsl:template>

<xsl:template match="Kongress/Kongress/datum">
   <br/>&#xA0;&#xA0;&#xA0;
   <xsl:call-template name="Nummerierung">     ' ruft Template Nummerierung auf
      <xsl:with-param name="format">a. </xsl:with-param>
   </xsl:call-template>
</xsl:template>

<xsl:template name="Nummerierung">
   <xsl:param name="format">1.</xsl:param>  
      <xsl:number format="{$format}"/>
      <xsl:apply-templates/> 
</xsl:template>

</xsl:stylesheet>

Wie funktionierts?

Im letzten Template "Nummerierung" sehen wir wie das Element xsl:param mit dem Namen "format" erstellt wird. Das Template selbst ist für die spätere Auflistung zuständig.
Das haben wir ja schon im Artikel http://www.devtrain.de/news.asp?artnr=523 besprochen.

So und nun der Reihe nach. Das erste Template matched unsere Knoten "Kongress/datum" und ruft das Template Nummerierung für jedes gefunden Element auf also:

<datum>ASP-net Konferenz</datum>
<datum>findet</datum>
...
<datum>statt</datum>


Dort findet eine Formatierung zu einer Auflistung statt. Das Element xsl:number bezieht seinen Wert aus dem xsl:param.

 

<xsl:param name="format">1.</xsl:param>   
<xsl:number format="{$format}"/>

Anschließend werden weitere Templates ("Kongress/Kongress/datum") aufgerufen, die eine die Knoten weiter unterhalb noch finden. Auch dort findet wieder der Aufruf auf das Template Nummerierung statt. Hier wird jedoch dem xsl:param ein anderer Wert hinzugewiesen:

<xsl:with-param name="format">a. </xsl:with-param>

Daher werden Konten unterhalb mit Kleinbuchstaben aufgelistet.

Das Ergebnis sieht so aus:

1.ASP-net Konferenz
2.findet
    a. vom 20.Juni
    b. bis
    c. 21. Juni
3.statt

Resumee:

Das Verhalten der Variablen oder Parameter in xsl haben eher den Charakter einer Konstanten oder einer Entität, da sich deren Werte eigentlich nie ändern. Dennoch ist es möglich z.B. xsl:param  mit Hilfe von xsl:with-param die Werte auszutauschen. Wir haben also nicht die Eigenschaft der Variable xsl:param geändert, wie in anderen Programmiersprachen, sondern eine neue Referenz gebildet.

Viel Spaß damit!


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 24.04.2002
  Gültig bis: 24.05.2002
21 Ratings
Bewertung: 85,7%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG