是否可以使用xslt?

访问查询字符串

我有一个网址,例如

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

我想做点什么

如果lang = en

<div>displaly stuff</div>

否则

 <div>display other stuff</div>

你能告诉我如何使用xslt吗?

有帮助吗?

解决方案

  

是否可以访问查询   字符串使用xslt?

是,如果查询字符串作为参数传递

以下代码显示访问查询字符串不需要扩展功能。它可以作为(全局)参数传递。这是首选,因为它减少了对扩展的需求,并使代码更清晰,更易读。

然后可以执行标记化(使用 tokenize () 使用 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&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>

当上述转换应用于任何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&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>

执行上述XSLT 2.0转换时,会产生正确的结果

  lang = "en"

其他提示

不在本机XSLT中,但您可以编写扩展对象来处理本机XSLT范围之外的复杂函数,例如在XSLT中,您可以在样式表中插入命名空间,例如

xmlns:ex="my:Qs"

然后致电

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

不,因为XSLT不是自行运行的编译代码。它是一种转换XML数据的技术,它由一些XSLT处理器调用。

因此,您可以将必要的可变数据作为参数提供给XSLT处理器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top