Получить параметры URL-адреса страницы или URL-адрес страницы в XSLT - PullRequest
2 голосов
/ 01 мая 2009

У меня есть страница, которая имеет структуру URL: http://www.abc.com/xyz?parama=1&paramb=2

  • Можно создать общий метод для получения значений любых дополнительных параметров, которые может быть URL-адрес (parama = 1 & paramb = 2)

  • Можно ли получить URL-адрес страницы в XSL, аналогичный javascript's location.href?

Ответы [ 4 ]

3 голосов
/ 02 мая 2009

Возможно ли получить URL-адрес страницы в XSL, аналогичный javascript's location.href?

Не совсем так, но да, строку запроса можно передать как параметр .

Можно ли создать универсальный метод получения значений любого дополнительные параметры URL может быть (Парам = 1 & paramb = 2)

Да, можно выполнить токенизацию (с помощью функции tokenize() в XSLT 2.0 или в XSLT 1.0, используя str-split-to-words шаблон ** FXSL 1.x или самописный шаблон рекурсивного токенизации.)

XSLT 1.0 решение :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common"
>

   <xsl:import href="strSplit-to-Words.xsl"/>

   <xsl:output indent="yes" omit-xml-declaration="yes"/>
     <xsl:param name="pQString" select=
     "'?parama=1&amp;paramb=2&amp;anyParamName=AnyValue'"
     />


    <xsl:template match="/">
    <xsl:variable name="vwordNodes">
      <xsl:call-template name="str-split-to-words">
        <xsl:with-param name="pStr" select="$pQString"/>
        <xsl:with-param name="pDelimiters"
                  select="'?&amp;'"/>
      </xsl:call-template>
    </xsl:variable>

    <xsl:apply-templates select=
     "ext:node-set($vwordNodes)/*
     "/>
    </xsl:template>

    <xsl:template match="word">
      <xsl:value-of select="."/>
      <xsl:text>&#xA;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

когда указанное преобразование применяется к любому документу XML (не будет использоваться), будет получен требуемый результат :

parama=1
paramb=2
anyParamName=AnyValue

Запишите использование шаблона FXSL 1.x str-split-to-words и использование функции расширения EXSLT ext:node-set() .

Решение XSLT 2.0 :

 <xsl:param name="pQString" as="xs:string" select=
 "'?parama=1&amp;paramb=2&amp;anyParamName=AnyValue'"
 />

<xsl:template match="/">
  <xsl:value-of separator="&#xA;" select=
  "tokenize($pQString, '\?|&amp;')
  "/>
</xsl:template>

Когда выполняется указанное выше преобразование XSLT 2.0, оно дает правильный результат :

parama=1
paramb=2
anyParamName=AnyValue
2 голосов
/ 01 мая 2009

Это может быть возможно при использовании EXSLT или регистрации обратного вызова функции с вашим конкретным процессором xslt, но не с простым старым XSLT, по крайней мере, насколько мне известно. С простым XSLT, если его нет в XML, то он не существует.

0 голосов
/ 29 июля 2010

Я обошел это, используя javascript в файле mi XSLT. посмотрите.

в XML У меня есть элемент тега с именем tag! да, очень оригинально ...

<tag url="http://www.demo.net/share.php?u=param1 />

Mi Sample transform

<div class="HelloDiv">
        <xsl:for-each select="tag">
          <a href="{@url}">
            This is my custom URL
          </a>
        </xsl:for-each>
</div>

Теперь внутри шаблона преобразования, при загрузке моего пользовательского значения в Param1 в этом случае я собираюсь использовать document.title .. используя функцию jquery.

 <script type="text/javascript">
      jQuery(function(){
        jQuery('div.HelloDiv a').each(function(){
          var parameter = jQuery(this).attr('href');
          parameter = currentUrl.replace('param1',escape(document.title));
          jQuery(this).attr('href',parameter);
        })
      });
  </script>
0 голосов
/ 01 мая 2009

Если это на стороне клиента, нет никакого способа сделать это. К сожалению, xsl очень ограничен в браузере. Боюсь, вам нужно будет перенести функциональность в веб-приложение или JavaScript.

Если преобразование выполняется на стороне сервера, возможно, вы можете что-то сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...