Gunnar Bittersmann: bedingte Transformation

Hello out there!

Ist es möglich, dass das aufrufende (PHP-)Script an die Transformation einen Parameter übergibt?

Dass man wenn man http://example.net/list?sort=givenname aufruft, die Liste nach Vornamen sortiert bekommt, bei http://example.net/list?sort=familyname nach Familiennamen, im XSLT also sowas inder Art:

<xsl:choose>  
  <xsl:when ... = "givenname">  
    <xsl:sort select="foaf:givenname"/>  
  </xsl:when>  
  <xsl:when ... = "familyname">  
    <xsl:sort select="foaf:family_name"/>  
  </xsl:when>  
</xsl:choose>

See ya up the road,
Gunnar

--
“Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
  1. Hi,

    Ist es möglich, dass das aufrufende (PHP-)Script an die Transformation einen Parameter übergibt?

    Das dürfte vom XSLT-Prozessor abhängen.

    Dass man wenn man http://example.net/list?sort=givenname aufruft, die Liste nach Vornamen sortiert bekommt, bei http://example.net/list?sort=familyname nach Familiennamen, im XSLT also sowas inder Art:

    xsl:param dürfte Dich interessieren.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hello out there!

      Ist es möglich, dass das aufrufende (PHP-)Script an die Transformation einen Parameter übergibt?

      Das dürfte vom XSLT-Prozessor abhängen.

      Hm, ginge es bei Sablotron? Und wie bekäme ich den Parameter von außen ins XSLT rein?

      xsl:param dürfte Dich interessieren.

      Ja, für die richtige Verschachtelung, wie Thomas sagte.

      See ya up the road,
      Gunnar

      --
      “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
      1. Hallo,

        Ist es möglich, dass das aufrufende (PHP-)Script an die Transformation einen Parameter übergibt?

        Das dürfte vom XSLT-Prozessor abhängen.

        Hm, ginge es bei Sablotron? Und wie bekäme ich den Parameter von außen ins XSLT rein?

        $xslt = xslt_create();
        $xml = 'test.xml';
        $xsl = 'test.xsl';
        $xslt_params["sort"] = $HTTP_GET_VARS["sort"];

        $result = xslt_process($xslt, $xml, $xsl, NULL, NULL, $params);

        Oder so:
        http://www.php.net/manual/en/function.xslt-process.php#39701

        Grüße
        Thomas

        1. Hello out there!

          Hm, ginge es bei Sablotron? Und wie bekäme ich den Parameter von außen ins XSLT rein?

          $xslt = xslt_create();
          $xml = 'test.xml';
          $xsl = 'test.xsl';
          $xslt_params["sort"] = $HTTP_GET_VARS["sort"];

          Ich stell mich noch zu blöd an.

          Wie habe ich im XSLT Zugriff auf den Parameter? So offenbar nicht:

          <xsl:param name="sort"/>  
          <p>Parameter: <xsl:value-of select="$sort"/></p>
          

          See ya up the road,
          Gunnar

          --
          “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
          1. Hallo,

            Hm, ginge es bei Sablotron? Und wie bekäme ich den Parameter von außen ins XSLT rein?

            $xslt = xslt_create();
            $xml = 'test.xml';
            $xsl = 'test.xsl';
            $xslt_params["sort"] = $HTTP_GET_VARS["sort"];

            Ich stell mich noch zu blöd an.

            Wie habe ich im XSLT Zugriff auf den Parameter? So offenbar nicht:

            <xsl:param name="sort"/>

            <p>Parameter: <xsl:value-of select="$sort"/></p>

              
            Aber genau so sollte es sein!  
            Eventuell an der Zeile :$xslt\_params["sort"] = $HTTP\_GET\_VARS["sort"]; was ändern bzw. sie überprüfen, damit du die HTTP-Variable wirklich bekommst -->  
            <http://at.php.net/manual/de/reserved.variables.php#reserved.variables.get>  
              
            Grüße  
            Thomas  
            
            
            1. Hi,

              <xsl:param name="sort"/>

              <p>Parameter: <xsl:value-of select="$sort"/></p>

              
              >   
              > Aber genau so sollte es sein!  
                
              Verwechsle ich jetzt was, oder müßte es <xsl:value-of select="{$sort}"/> heißen? Also mit {} um den Parameter?  
                
              cu,  
              Andreas
              
              -- 
              [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
              [Schreinerei Waechter](http://www.schreinerei-waechter.de/)  
              [O o ostern ...](http://ostereier.andreas-waechter.de/)  
              Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.  
              
              
              1. Hello out there!

                Verwechsle ich jetzt was, oder müßte es <xsl:value-of select="{$sort}"/> heißen? Also mit {} um den Parameter?

                Dann geht gar nichts mehr.

                See ya up the road,
                Gunnar

                --
                “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
            2. Hello out there!

              Aber genau so sollte es sein!
              Eventuell an der Zeile :$xslt_params["sort"] = $HTTP_GET_VARS["sort"]; was ändern bzw. sie überprüfen, damit du die HTTP-Variable wirklich bekommst

              Die bekomme ich: http://gundi.de/test/xslt-param.php?sort=foo

              $HTTP_GET_VARS["sort"]           »foo«
              <xsl:value-of select="$sort"/>   »«
              <xsl:value-of select="{$sort}"/>

              xslt-param.php:

              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
              <html xmlns="http://www.w3.org/1999/xhtml">  
                <head>  
                  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
                  <title>Test: XSLT mit Parameter</title>  
                  <link rel="stylesheet" type="text/css" href="xslt-param.css" />  
                </head>  
                <body>  
                  <table>  
                    <tr>  
                      <th>$HTTP_GET_VARS["sort"]</th>  
                      <td>»<?php [code lang=php]echo $HTTP_GET_VARS["sort"];
              ~~~ ?>«</td>  
                    </tr>  
                    <tr>  
                      <th>&lt;xsl:value-of select=&quot;$sort&quot;/&gt;</th>  
              <?php  
              ~~~php
                $xslt = xslt_create();  
                $xml = 'xslt-param.xml';  
                $xsl = 'xslt-param.xsl';  
                $xslt_params["sort"] = $HTTP_GET_VARS["sort"];  
                $result = xslt_process($xslt, $xml, $xsl, NULL, NULL, $params);  
                xslt_free($xslt);  
                echo $result;
              

              ?>
                    </tr>
                    <tr>
                      <th>&lt;xsl:value-of select=&quot;{$sort}&quot;/&gt;</th>
              <?php

                $xslt = xslt_create();  
                $xml = 'xslt-param.xml';  
                $xsl = 'xslt-param-braces.xsl';  
                $xslt_params["sort"] = $HTTP_GET_VARS["sort"];  
                $result = xslt_process($xslt, $xml, $xsl, NULL, NULL, $params);  
                xslt_free($xslt);  
                echo $result;
              

              ?>
                    </tr>
                  </table>
                </body>
              </html>[/code]

              xslt-param.xsl:

              <xsl:stylesheet version="1.0"  
                xmlns="http://www.w3.org/1999/xhtml"  
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
              
              >  
              
                <xsl:output  
                  xsl:encoding="UTF-8"  
                  xsl:indent="no"  
                  xsl:method="xml"  
                  xsl:omit-xml-declaration="yes"  
                  xsl:standalone="no"  
                />  
                <xsl:param name="sort"/>  
                <xsl:template match="/">  
                  <td>  
                    <xsl:text>»</xsl:text>  
                    <xsl:value-of select="$sort"/>  
                    <xsl:text>«</xsl:text>  
                  </td>  
                </xsl:template>  
              </xsl:stylesheet>
              

              in xslt-param-braces.xsl:

              <xsl:value-of select="{$sort}"/>

              See ya up the road,
              Gunnar

              --
              “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
              1. Hallo,

                $xslt_params["sort"] = $HTTP_GET_VARS["sort"];
                ^^^^^^^^^^^^
                $result = xslt_process($xslt, $xml, $xsl, NULL, NULL, $params);
                                                                    ^^^^^^^^^^^^^^

                Ich bin zwar kein PHP-Experte, aber ich würde meinen, dass du schon die richtige Variable verwenden müsstest!

                Grüße
                Thomas

                PS: <xsl:value-of select="{$sort}"/> ist Blödsinn.

                1. Hello out there!

                  $xslt_params["sort"] = $HTTP_GET_VARS["sort"];
                  ^^^^^^^^^^^^
                  $result = xslt_process($xslt, $xml, $xsl, NULL, NULL, $params);
                                                                      ^^^^^^^^^^^^^^
                  Ich bin zwar kein PHP-Experte, aber ich würde meinen, dass du schon die richtige Variable verwenden müsstest!

                  Argl, warum sagstes mir dann erst falsch? Kann man denn nicht mal mehr dir blindlings trauen?

                  PS: <xsl:value-of select="{$sort}"/> ist Blödsinn.

                  Kann man nicht nicht mal mehr MudGuard trauen?

                  See ya up the road,
                  Gunnar

                  PS: Nichts von alledem soll in irgendeiner Weise ein Vorwurf sein; alles ';-)' und 'SCNR'.

                  Kaum macht man’s richtig, schon geht’s. Danke.

                  --
                  “Blind faith in your leaders or in anything would get you killed.” (Bruce Springsteen)
                  1. Hi,

                    PS: <xsl:value-of select="{$sort}"/> ist Blödsinn.

                    Ok - ich hab ja extra vorsichtig formuliert, weil ich mir nicht sicher war, hab schon wieder zu lange kein XSLT gemacht.

                    Kann man nicht nicht mal mehr MudGuard trauen?

                    Nach Ausbau der doppelten Verneinung ergibt sich:

                    Kann man mal mehr MudGuard trauen?

                    Ja, kann man - mal mehr, mal weniger ;-)

                    cu,
                    Andreas

                    --
                    Warum nennt sich Andreas hier MudGuard?
                    Schreinerei Waechter
                    O o ostern ...
                    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                  2. Hallo,
                                                                         ^^^^^^^^^^^^^^

                    Ich bin zwar kein PHP-Experte, aber ich würde meinen, dass du schon die richtige Variable verwenden müsstest!

                    Argl, warum sagstes mir dann erst falsch? Kann man denn nicht mal mehr dir blindlings trauen?

                    Weil es hier selberdenken heisst *fg* ;-)

                    Kaum macht man’s richtig, schon geht’s. Danke.

                    Fein :)

                    Grüße
                    Thomas

  2. Hallo,

    Ist es möglich, dass das aufrufende (PHP-)Script an die Transformation einen Parameter übergibt?

    Dass man wenn man http://example.net/list?sort=givenname aufruft, die Liste nach Vornamen sortiert bekommt, bei http://example.net/list?sort=familyname nach Familiennamen, im XSLT also sowas inder Art:

    xsl:choose

    <xsl:when ... = "givenname">
        <xsl:sort select="foaf:givenname"/>
      </xsl:when>
      <xsl:when ... = "familyname">
        <xsl:sort select="foaf:family_name"/>
      </xsl:when>
    </xsl:choose>

      
      
    Das ist so definitiv nicht möglich.  
    xsl:sort muss als erstes Kind vom xsl:for-each oder vom xsl:apply-templates stehen.  
      
    Also:  
      
    param name="sort" /  
    ...  
      
    when test="$sort = 'givenname'"  
     apply-templates select=...  
       sort select="foaf:givenname"  
     /apply-templates  
      
    when test="$sort = 'familyname'"  
     for-each select=...  
       sort select="foaf:family\_name"  
       ...  
     /for-each  
      
    otherwiese  
     ...  
      
    Grüße  
    Thomas