Querystring mit xslt

ist es möglich, mit xslt auf eine Abfragezeichenfolge zuzugreifen?

ich habe eine URL z.B .g

www.example.com/page.aspx?k=aa&lang=en

Ich möchte so etwas wie

tun, wenn lang = en

<div>displaly stuff</div>

sonst

 <div>display other stuff</div>

kann st. b.

 <div>display other stuff</div>

mir zeigen, wie man das mit xslt macht?

Antwort auf "Querystring mit xslt " 3 von antworten

Nicht in nativem XSLT nein, aber Sie können Erweiterungsobjekte schreiben, die komplexe Funktionen verarbeiten, die außerhalb des Bereichs von nativeXSLT liegen, sodass Sie z. B. in Ihrer XSLT einen Namespace in das Stylesheet einfügen können, z. B.

xmlns:ex="my:Qs"

und dann

<xsl:variable name="qs" select="my:Qs('parameterName')"/>
aufrufen.

Nein, da XSLT kein kompilierter Code ist, der eigennfürschiert ausgeführt wird. Es ist eine Technologie zum Transformieren von XML-Daten und wird von einigen XSLT-Prozessoren aufgerufen.

Es liegt also an Ihnen, Ihrem XSLT-Prozessor die erforderlichen variablen Daten als Parameter zur Verfügung zu stellen.

String mit xslt?

Ja, wenn die Abfragezeichenfolge als Parameter übergeben wird.

Der folgende Code zeigt, dass keine Erweiterungsfunktion erforderlich ist, um auf eine Abfragezeichenfolge zuzugreifen. Sie kann als (globaler) Parameter übergeben werden. Dies ist zu bevorzugen, da es den Bedarf an Erweiterungen reduziert und zu saubererem und lesbarerem Code führt.

Dann kann man die Tokenisierung durchführen (mit der Funktion tokenize() function in XSLT 2.0 or in XSLT 1.0 using the in XSLT 2.0 oder in XSLT 1.0 mit der str-split-to-words template of Vorlage von FXSL 1.x or a self-written recursive tokenization template.) oder einer selbstgeschriebenen rekursiven Tokenisierungsvorlage.)

XSLT 1.0 Lösung :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common"
>

   <xsl:import href="strSplit-to-Words.xsl"/>

   <xsl:output indent="yes" omit-xml-declaration="yes"/>
     <xsl:param name="pQString" select=
     "'?login=userId&amp;tag=XSLT&amp;lang=en&amp;level=expert'"
     />


    <xsl:template match="/">
    <xsl:variable name="vwordNodes">
      <xsl:call-template name="str-split-to-words">
        <xsl:with-param name="pStr" select="$pQString"/>
        <xsl:with-param name="pDelimiters" 
                  select="'?&amp;'"/>
      </xsl:call-template>
    </xsl:variable>

    <xsl:variable name="vLang" select=
      "substring-after(ext:node-set($vwordNodes)/*
                             [starts-with(.,'lang=')]
                               [last()],
                       'lang='
                      )
      "/>

      <xsl:value-of select="concat('lang = ', $vLang)"/>
    </xsl:template>
</xsl:stylesheet>

, wenn die obige Transformation auf ein XML-Dokument angewendet wird (wird nicht verwendet), wird das gewünschte Ergebnis produziert :

lang = en

Beachten Sie die Verwendung der FXSL 1.x str-split-to-words template and the use of the EXSLT Vorlage und die Verwendung der EXSLT ext:node-set() extension function Erweiterungsfunktion .

XSLT 2.0 Lösung :

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

   <xsl:output indent="yes" omit-xml-declaration="yes"/>

     <xsl:param name="pQString" as="xs:string" select=
     "'?login=userId&amp;tag=XSLT&amp;lang=en&amp;level=expert'"
     />

    <xsl:template match="/">
      <xsl:variable name="vLang" as="xs:string" select=
      "substring-after(
                       tokenize($pQString, '\?|&amp;')
                                 [starts-with(.,'lang=')]
                                    [last()],

                       'lang='
                       )
      "/>

      lang = "<xsl:sequence select='$vLang'/>"
    </xsl:template>
</xsl:stylesheet>

Wenn die oben genannte XSLT 2.0-Transformation durchgeführt wird, erzeugt sie das korrekte Ergebnis :

  lang = "en"

ist es möglich, auf eine Abfrage zuzugreifen