2010-05-12 6 views
0

У меня есть URL-структура, как это:XSLT, как объединить несколько списков параметров

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, который держит существующие параметры и добавляет один или несколько новых параметров, таких как page=3 или sort=DESC. Если данный параметр уже существует, его следует заменить.

Я не уверен, как это сделать. Как передать несколько (необязательных) параметров в шаблон. Как объединить два списка параметров.

Любые идеи?

Спасибо;)

+0

Знаете ли вы имена дополнительных параметров заранее? – Welbog

+0

№ «страница» и «сортировка» - это лишь некоторые примеры. Число и имя принятых параметров могут варьироваться в зависимости от param1 и param2. –

ответ

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.

Смежные вопросы