我有这样的网址结构:
http://my.domain.com/generated.xml?param1=foo¶m2=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=3
或sort=DESC
。如果给定的参数已经存在,则应该替换它。
我不知道该怎么做。如何将多个(可选)参数传递给模板。如何合并两个参数列表。
有什么想法吗?
谢谢;)
答案 0 :(得分:0)
根据我的理解,您的目标是构建一个这样的字符串:http://my.domain.com/generated.xml?param1=foo¶m2=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参数填充。