是否可以使用xslt?
访问查询字符串我有一个网址,例如
www.example.com/page.aspx?k=aa&lang=en
我想做点什么
如果lang = en
<div>displaly stuff</div>
否则
<div>display other stuff</div>
你能告诉我如何使用xslt吗?
答案 0 :(得分:8)
是否可以访问查询 字符串使用xslt?
是,如果查询字符串作为参数传递。
以下代码显示访问查询字符串不需要扩展功能。它可以作为(全局)参数传递。这是首选,因为它减少了对扩展的需求,并使代码更清晰,更易读。
然后可以使用tokenize()
的str-split-to-words
模板或自编写的递归标记化模板,在XSLT 2.0或XSLT 1.0中使用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"
答案 1 :(得分:1)
不在本机XSLT中,但您可以编写扩展对象来处理本机XSLT范围之外的复杂函数,例如在XSLT中,您可以在样式表中插入名称空间,例如
xmlns:ex="my:Qs"
然后致电
<xsl:variable name="qs" select="my:Qs('parameterName')"/>
答案 2 :(得分:1)
不,因为XSLT不是自行运行的编译代码。它是一种转换XML数据的技术,它由一些XSLT处理器调用。
因此,您可以将必要的可变数据作为参数提供给XSLT处理器。