xsl: передача переменной в путь к файлу xsl - PullRequest
1 голос
/ 27 марта 2012

Есть ли способ передать атрибут, комбинации переменных непосредственно в путь URL с помощью xsl?

Пример:

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

Я хотел бы использовать эти атрибуты и значения длявключить определенные флаги внутри xsl-файла.

Ответы [ 4 ]

0 голосов
/ 28 марта 2012

Вот полное решение 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>
0 голосов
/ 27 марта 2012

Да, вам просто нужно убежать & как &amp;

0 голосов
/ 28 марта 2012

Я думаю, вы имеете в виду, может ли таблица стилей получить доступ к своему собственному URI для доступа к параметрам.В XSLT2 вы можете использовать функцию static-base-uri () для доступа к URI, а затем разделить его, чтобы извлечь параметры запроса, используя строковые функции регулярного выражения.В XSLT1 это невозможно, вам необходимо передать информацию в виде параметров таблицы стилей, а таблица стилей XSLT1 не имеет доступа к URI источника или самого себя.

0 голосов
/ 27 марта 2012

Использование concat()

<xsl:variable name="url" select="concat($currURL, 'flag=true')" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...