2012-03-27 14 views
1

Gibt es eine Möglichkeit, ein Attribut, Variablenkombinationen direkt in den Pfad der URL mit xsl übergeben?xsl: Variable in xsl Dateipfad übergeben

Beispiel:

http://something.xsl?asdf=12&attribute2=1234 

Ich mag würde diese Attribute und Werte verwenden, um bestimmte Fahnen innerhalb der XSL-Datei zu aktivieren.

Antwort

0

Verwenden concat()

<xsl:variable name="url" select="concat($currURL, 'flag=true')" /> 
0

Ja, man muss nur die & als &amp;

0

ich entkommen denken Sie das Stylesheet Zugang seinen eigenen URI auf die Parameter zuzugreifen bedeuten kann. In XSLT2 können Sie die Funktion static-base-uri() verwenden, um auf den URI zuzugreifen. Anschließend können Sie ihn aufteilen, um die Abfrageparameter mithilfe der Regex-Zeichenfolgenfunktionen zu extrahieren. In XSLT1 ist es nicht möglich, die Informationen als Stylesheet-Parameter zu übergeben, und das XSLT1-Stylesheet hat keinen Zugriff auf den URI der Quelle oder auf sich selbst.

0

die komplette XSLT 1.0 Lösung ist, unter der Annahme, dass die URL als externen Parameter an die Transformation übergeben wird:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:param name="pUrl" select= 
"'http://something.xsl?asdf=12&amp;attribute2=1234'"/> 

<xsl:template match="/"> 
    <xsl:variable name="vQuery" select="substring-after($pUrl, '?')"/> 

    <xsl:variable name="vrtfQueryItems"> 
    <xsl:call-template name="buildQueryItems"> 
    <xsl:with-param name="pQuery" select="$vQuery"/> 
    </xsl:call-template> 
    </xsl:variable> 

    <xsl:variable name="vQueryItems" 
    select="ext:node-set($vrtfQueryItems)/*"/> 

    <xsl:copy-of select="$vQueryItems"/> 
</xsl:template> 

<xsl:template name="buildQueryItems"> 
    <xsl:param name="pQuery"/> 

    <xsl:if test= 
    "string-length($pQuery) > 0"> 

    <xsl:variable name="vQuery" select="concat($pQuery, '&amp;')"/> 
    <xsl:variable name="vItem" select="substring-before($vQuery, '&amp;')"/> 

    <param name="{substring-before(concat($vItem, '='), '=')}"> 
    <xsl:value-of select="substring-after($vItem, '=')"/> 
    </param> 


    <xsl:call-template name="buildQueryItems"> 
    <xsl:with-param name="pQuery" select="substring-after($pQuery, '&amp;')"/> 
    </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

Wenn diese Transformation an einem XML-Dokument (nicht verwendet) angelegt wird, das gewünschte Ergebnis wird erzeugt:

<param name="asdf">12</param> 
<param name="attribute2">1234</param>