在XSLT中检索页面URL参数或页面URL

时间:2009-05-01 19:40:26

标签: xslt

我有一个包含网址结构的网页:  http://www.abc.com/xyz?parama=1&paramb=2

  • 是否可以创建一个通用方法来获取URL可能的任何其他参数的值(parama = 1& paramb = 2)

  • 是否可以在XSL中获取类似于javascript的location.href的页面的URL?

4 个答案:

答案 0 :(得分:3)

  

是否可以在XSL中获取类似于javascript的location.href的页面的URL?

不完全相同,但是,查询字符串可以作为参数传递

  

是否可以创建通用   获取任何值的方法   URL的其他参数可能   (至尊= 1&安培; paramb = 2)

是的,可以使用 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=
     "'?parama=1&amp;paramb=2&amp;anyParamName=AnyValue'"
     />


    <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:apply-templates select=
     "ext:node-set($vwordNodes)/*
     "/>
    </xsl:template>

    <xsl:template match="word">
      <xsl:value-of select="."/>
      <xsl:text>&#xA;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

当上述转换应用于任何XML文档(不会被使用)时,生成所需结果

parama=1
paramb=2
anyParamName=AnyValue

请注意 使用FXSL 1.x str-split-to-words模板以及使用EXSLT ext:node-set()扩展功能

XSLT 2.0解决方案

 <xsl:param name="pQString" as="xs:string" select=
 "'?parama=1&amp;paramb=2&amp;anyParamName=AnyValue'"
 />

<xsl:template match="/">
  <xsl:value-of separator="&#xA;" select=
  "tokenize($pQString, '\?|&amp;')
  "/>
</xsl:template>

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

parama=1
paramb=2
anyParamName=AnyValue

答案 1 :(得分:2)

这可以使用EXSLT,或者使用特定的xslt处理器注册函数回调,但不能使用普通的旧XSLT,至少我不知道。使用普通的XSLT,如果它不在XML中,那么它就不存在了。

答案 2 :(得分:0)

如果是客户端,则无法做到这一点。不幸的是,xsl在浏览器中非常有限。我担心你需要将功能转移到webapp或javascript。

如果转换是服务器端,那么您可以执行某些操作。

答案 3 :(得分:0)

我通过在mi XSLT文件中使用javascript来解决这个问题。看看。

on XML我有一个名为tag的标签元素!是的,很原始......

<tag url="http://www.demo.net/share.php?u=param1 />

Mi Sample transform

<div class="HelloDiv">
        <xsl:for-each select="tag">
          <a href="{@url}">
            This is my custom URL
          </a>
        </xsl:for-each>
</div>

现在在转换模板中,在Param1中加载我的自定义值 在这种情况下,我将通过使用jquery函数来使用document.title ..

 <script type="text/javascript">
      jQuery(function(){
        jQuery('div.HelloDiv a').each(function(){
          var parameter = jQuery(this).attr('href');
          parameter = currentUrl.replace('param1',escape(document.title));
          jQuery(this).attr('href',parameter);
        })
      });
  </script>