質問
xsltを使用してクエリ文字列にアクセスできますか?
iにはURLがあります。例:
www.example.com/page.aspx?k=aa&lang=en
次のようなことをしたい
if lang = en
<div>displaly stuff</div>
else
<div>display other stuff</div>
xsltを使用してこれを行う方法を教えてもらえますか?
解決
クエリにアクセスできますか xsltを使用した文字列?
はい、クエリ文字列がパラメーターとして渡される場合。
以下のコードは、クエリ文字列にアクセスするための拡張機能が不要であることを示しています。 (グローバル)パラメーターとして渡すことができます。これは、拡張の必要性を減らし、コードをより簡潔で読みやすいものにするため、推奨されます。
トークン化を実行できます( tokenize ()
XSLT 2.0またはXSLT 1.0の str-split-to-words
FXSL 1.x または自己記述の再帰トークン化テンプレート。)
XSLT 1.0ソリューション:
<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&tag=XSLT&lang=en&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="'?&'"/>
</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>
上記の変換がXMLドキュメントに適用されると(使用されません)、必要な結果が生成されます:
lang = en
注意 FXSL 1.x str-split-to-words
テンプレートの使用とEXSLT ext:nodeの使用-set()
拡張関数。
XSLT 2.0ソリューション:
<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&tag=XSLT&lang=en&level=expert'"
/>
<xsl:template match="/">
<xsl:variable name="vLang" as="xs:string" select=
"substring-after(
tokenize($pQString, '\?|&')
[starts-with(.,'lang=')]
[last()],
'lang='
)
"/>
lang = "<xsl:sequence select='$vLang'/>"
</xsl:template>
</xsl:stylesheet>
上記のXSLT 2.0変換が実行されると、正しい結果が生成されます:
lang = "en"
他のヒント
ネイティブXSLTではない
xmlns:ex="my:Qs"
そして呼び出し
<xsl:variable name="qs" select="my:Qs('parameterName')"/>
いいえ。XSLTは、単独で実行されるコンパイル済みコードではないためです。これは、XMLデータを変換するためのテクノロジーであり、XSLTプロセッサーによって呼び出されます。
したがって、必要な変数データをパラメーターとしてXSLTプロセッサーに提供するのはユーザー次第です。