2012-02-09 15 views
5

xslにURL変数を渡すことは可能ですか?URL変数をxslに渡す

EG。 ます。http:?www.somedomain.com/index.aspx myVarに=テスト& myVar2 = anotherTest

私は私のXSLファイルのロジックでmyVarにし、myVar2の値を使用できるようにしたいと思います。おかげさまで

答えて

5

もちろん可能です。 xsl:stylesheet要素にxsl:param要素を使用し、XSLエンジンのパラメータを渡します。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:param name="url"/> 

そして、文字列関数、例えばを使用します。

<xsl:variable name="right-part" select="substring-after($url, 'myVar=')"/> 
<xsl:value-of select="substring-before(substring-before($right-part, 'myVar2='), '&amp;')"/> 
<xsl:text>|</xsl:text> 
<xsl:value-of select="substring-after($right-part, 'myVar2=')"/> 
+0

次に、myVarとmyVar2の値にアクセスするためにURLを分割する必要がありますか? –

+0

@ user1001421、私は私の答えを更新しました。 –

+0

素晴らしい。助けてくれてありがとう。ちょうど私が後だったもの。 –

1

ここでは、与えられたURLからクエリ文字列パラメータの任意の番号を取得し、より汎用的な変換です:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="pUrl" select= 
"'http:www.somedomain.com/index.aspx?myVar=test&amp;myVar2=anotherTest&amp;myVar3=yetAnotherTest'"/> 

<xsl:template match="/"> 
    <xsl:call-template name="GetQueryStringParams"/> 
</xsl:template> 

<xsl:template name="GetQueryStringParams"> 
    <xsl:param name="pUrl" select="$pUrl"/> 

     <xsl:variable name="vQueryPart" select= 
     "substring-before(substring-after(concat($pUrl,'?'), 
             '?'), 
         '?')"/> 

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

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

    <xsl:variable name="vRest" select="substring-after($vQueryPart, '&amp;')"/> 

    <xsl:if test="string-length($vRest) > 0"> 
     <xsl:call-template name="GetQueryStringParams"> 
     <xsl:with-param name="pUrl" select= 
     "concat('?', substring(substring-after($vQueryPart, $vHeadVar), 2))"/> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

この変換が任意のXML文書(使用されていない)に適用されると、必要な正しい結果が生成されます

<myVar>test</myVar> 
<myVar2>anotherTest</myVar2> 
<myVar3>yetAnotherTest</myVar3> 
+0

申し訳ありませんがDimitre。私はちょうどこの質問に戻ってチェックした。それは非常に印象的なように見え、私はそれを試してみるでしょう。御時間ありがとうございます。 –

+0

@ user1001421:どうぞよろしくお願いいたします。 –

関連する問題