xsl:将变量传递给xsl文件路径

时间:2012-03-27 18:25:32

标签: xslt

有没有办法将属性,变量组合直接传递到xll的url路径?

示例:

http://something.xsl?asdf=12&attribute2=1234

我想使用这些属性和值来启用xsl文件中的某些标志。

4 个答案:

答案 0 :(得分:0)

使用concat()

<xsl:variable name="url" select="concat($currURL, 'flag=true')" />

答案 1 :(得分:0)

是的,您只需要将&转义为&amp;

答案 2 :(得分:0)

我认为你的意思是样式表可以访问自己的URI来访问参数。在XSLT2中,您可以使用static-base-uri()函数来访问URI,然后您可以将其拆分以使用正则表达式字符串函数提取查询参数。在XSLT1中,不可能,您需要以样式表参数的形式传递信息,而XSLT1样式表无法访问源或其自身的URI。

答案 3 :(得分:0)

这是一个完整的XSLT 1.0解决方案,假设URL作为外部参数传递给转换

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:param name="pUrl" select=
 "'http://something.xsl?asdf=12&amp;attribute2=1234'"/>

 <xsl:template match="/">
  <xsl:variable name="vQuery" select="substring-after($pUrl, '?')"/>

  <xsl:variable name="vrtfQueryItems">
   <xsl:call-template name="buildQueryItems">
     <xsl:with-param name="pQuery" select="$vQuery"/>
   </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="vQueryItems"
    select="ext:node-set($vrtfQueryItems)/*"/>

  <xsl:copy-of select="$vQueryItems"/>
 </xsl:template>

 <xsl:template name="buildQueryItems">
   <xsl:param name="pQuery"/>

   <xsl:if test=
    "string-length($pQuery) > 0">

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

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


   <xsl:call-template name="buildQueryItems">
    <xsl:with-param name="pQuery" select="substring-after($pQuery, '&amp;')"/>
   </xsl:call-template>
   </xsl:if>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于任何XML文档(未使用)时,生成所需结果

<param name="asdf">12</param>
<param name="attribute2">1234</param>