Thomas J.S.: XSLT mit parameter

Beitrag lesen

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