XSLT, как объединить несколько списков параметров - PullRequest
0 голосов
/ 12 мая 2010

У меня есть структура URL, подобная этой:

 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. Если данный параметр уже существует, его следует заменить.

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

Есть идеи?

Спасибо;)

1 Ответ

0 голосов
/ 12 мая 2010

Ваша цель, насколько я понимаю, состоит в том, чтобы построить строку, подобную этой: 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.

...