XSLT如何合并一些参数列表

时间:2010-05-12 16:00:59

标签: xslt parameters uri

我有这样的网址结构:

 http://my.domain.com/generated.xml?param1=foo&param2=bar&xsl=path/to/my.xsl

生成的XML将使用给定的XSL样式表进行转换。其他两个参数也是这样集成的:

<root>
  <params>
    <param name="param1">foo</param>
    <param name="param2">bar</param>
  </param>
  ...
</root>

现在我想用XSLT创建一个带有新URI的链接,该URI保留现有参数并添加一个或多个新参数,如page=3sort=DESC。如果给定的参数已经存在,则应该替换它。

我不知道该怎么做。如何将多个(可选)参数传递给模板。如何合并两个参数列表。

有什么想法吗?

谢谢;)

1 个答案:

答案 0 :(得分:0)

根据我的理解,您的目标是构建一个这样的字符串:http://my.domain.com/generated.xml?param1=foo&param2=bar&page=3&sort=DESC&xsl=path/to/my.xsl不重复参数。因此,如果有http://my.domain.com/generated.xml?param1=foo&sort=ASC&xsl=path/to/my.xsl这样的请求,您就不会意外地像http://my.domain.com/generated.xml?param1=foo&sort=ASC&page=3&sort=DESC&xsl=path/to/my.xsl那样产生结果。是吗?

如果是这种情况,我会为您需要的每个参数定义一个变量,如果适用,则为URL分配值,否则为默认值。这些方面的东西:

<xsl:variable name="sort">
  <xsl:choose>
    <xsl:when test="/root/params/param[name='sort']">
      <!-- Use the available parameter if it exists. -->
      <xsl:value-of select="/root/params/param[name='sort']/text()"/>
    </xsl:when>
    <xsl:otherwise>
      <!-- Use a default value when the parameter doesn't exist. -->
      <xsl:text>DESC</xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>

当您构建生成的URI时,您可以使用$sort,而不必担心它是使用默认值还是使用URL参数填充。