Daniel_F: XSLT mit parameter

hallo zusammen,

kann mir vieleicht einer erklären wie das genau mit den Parametern in XSLT funktioniert werden aus den meisten codezeilen nicht schlau und verstehe nicht genau wie ich diese für meine zwecke verwenden kann.

vieleicht kann mir einer ein paar zeilen code hier erklären wäre echt nett

Gruß Daniel

  1. Moin!

    kann mir vieleicht einer erklären wie das genau mit den Parametern in XSLT funktioniert

    Wo ist das Problem? Nehmen wir einmal folgendes Beispiel:

    <xsl:param name="Parameter" select="'String-Parameter'" />  
      
    <xsl:param name="P2" select="23" /> <!-- Zahlwert -->  
      
    <xsl:param name="viel">  
        <!-- Ein bisschen mehr Code, evtl. sogar Tags (?) -->  
    </xsl:param>  
      
    <!-- Dieser Parameter muss zwingend von außen gesetzt werden: -->  
    <xsl:param name="Zwingend" />
    

    Damit deklarierst du die Parameter »Parameter«, »P2« sowie »viel« für dein XSLT, auf die du in der Datei mit »$Parameter«, »$P2«, … (wie bei Variablen) zugreifst. Zusätzlich haben alle drei Parameter Standardwerte gesetzt, was du allerdings nicht zwingend machen must. Diese Parameter kannst du außerdem von außen setzen, d.h. dem XSLT-Prozessor als Argumente mitgeben, bei xsltproc sieht das dann so aus:

    xsltproc --param Parameter '"String-Parameter"' --param P2 23 \     --param viel '<!-- Ein bisschen mehr Code, evtl. sogar Tags -->' \     --param Zwingend '"gesetzt"'

    Oder meinst du Parameter an/in Templates:

    <!-- Definition eines Templates, welches einen Parameter namens  
         »Paramter« erwartet:  
      -->  
    <xsl:template name="einTemplate">  
        <xsl:param name="Parameter" />  
      
        <Ausgabe>Parameter: <xsl:value-of select="$Parameter" /></Ausgabe>  
    </xsl:template>  
      
    <!-- Template-Aufruf irgendwo später im Code: -->  
    <xsl:call-template name="einTemplate">  
        <xsl:with-param name="Parameter" select="/ein/node" />  
    </xsl:call-template>
    

    werden aus den meisten codezeilen nicht schlau und verstehe nicht genau wie ich diese für meine zwecke verwenden kann.

    Aus der vagen Problembeschreibung werde ich leider auch nicht schlau.

    Viele Grüße,
    Robert

  2. Hallo,

    kann mir vieleicht einer erklären wie das genau mit den Parametern in XSLT funktioniert werden aus den meisten codezeilen nicht schlau und verstehe nicht genau wie ich diese für meine zwecke verwenden kann.

    vieleicht kann mir einer ein paar zeilen code hier erklären wäre echt nett

    Was genau verstehst du dabei nicht? Wie weit bist du schon selbst gekommen?

    Parameters in XSLT kannst du verwenden um darin Werte zu speicher, die du dann später abfragen und auch verändern kannst. In XSLT gibt es einen unterschied zwischen Parameter und Variable: den Wert einer Variable kann man in XSLT nicht ändern, der bleibt innerhalb des Geltungsbereichs der Variable immer gleich. Den Wert eines Parameters kann dagegen verändert werden.

    Wenn die XML/XSLT-Transformation am Server stattfindet, werden Parameter für den Stylesheet oft im URL übergeben:

    Dein XML siehz z.B. so aus:
        <datensatz>
          <gruppe>autos</gruppe>
          <farbe>silber</farbe>
          ...
        </datensatz>
        <datensatz>
          <gruppe>autos</gruppe>
          <farbe>rot</farbe>
          ...
        </datensatz>
        <datensatz>
          <gruppe>schiffe</gruppe>
          <farbe>weiss</farbe>
          ...
        </datensatz>

    Der User wählt in der Webseite im Formular aus, dass er nur silberfarbene Autos angezeigt bekommen möchte:

    http://www.example.com/?zeigegruppe=autos&zeigefarbe=silber

    Jetzt muss du zwei globale Parameter in deinem XSL definieren:

    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:param name="zeigegruppe" />
    <xsl:param name="zeigefarbe" />

    Um die gewünschte Sachen auszugeben, kannst du jetzt die Parameters abfragen:

    <xsl:for-each select="datensatz[gruppe = $zeigegruppe]">
     <xsl:if test="farbe = $zeigefarbe">
       hier kommt dann z.B. der HTML-Code
     </xsl:if>
    </xsl:for-each>

    Hier werden die Werte, die den Parametern zugewiesen wurden, überprüft:

    <xsl:for-each select="datensatz[gruppe = $zeigegruppe]"> prüft also:
    <xsl:for-each select="datensatz[gruppe = 'autos']">. Ebenso bei Farbe.

    Das war eine Möglichkeit.

    Eine andere ist, wenn du bestimmte Werte nicht nur auslesen und speichern aber auch verändern willst. Das kann bei dem Aufruf eines Templates sein:

    <xsl:template match="datensatz">
     <xsl:param name="diefarbe" select="farbe" />
     <p style="background-color:{$difarbe}"><xsl:value-of select="gruppe" /></p>
    </xsl:template>

    Hier selektiert der Parameter aus dem XML seinen Wert und der wird dann für die Hintergrundfarbe verwendet.
    Das ist ersmal OK, aber an einer anderen Stelle im Dokument willst du für die "autos" weissen Hintergrund haben:

    <xsl:apply-templates select="datensatz[gruppe = 'autos']">
     <xsl:with-param name="diefarbe" select="'white'" />
    </xsl:apply-templates>

    Mit <xsl:with-param name="diefarbe" select="'white'" /> überschreibst du den Parameter den du im Template definiert hast.

    Eine andere häufige Anwendung von Paramter ist, die Verwendung bei rekursiven Templates wie z.B. bei einem Counter:
    http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#with_param

    Grüße
    Thomas