Передача переменной URL в xsl - PullRequest
5 голосов
/ 09 февраля 2012

Можно ли передать переменную URL в xsl.

EG.http: www.somedomain.com/index.aspx? myVar = test & myVar2 = anotherTest

Я бы хотел использовать значения myVar и myVar2 в логике моего xsl-файла.Спасибо.

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Конечно, вы можете. Используйте элемент xsl:param в элементе xsl:stylesheet и передайте параметр из вашего механизма XSL.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="url"/>

Затем используйте строковые функции, например ::10000

<xsl:variable name="right-part" select="substring-after($url, 'myVar=')"/>
<xsl:value-of select="substring-before(substring-before($right-part, 'myVar2='), '&amp;')"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="substring-after($right-part, 'myVar2=')"/>
1 голос
/ 09 февраля 2012

Вот более общее преобразование, которое получает любое количество параметров строки запроса по заданному URL-адресу :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pUrl" select=
 "'http:www.somedomain.com/index.aspx?myVar=test&amp;myVar2=anotherTest&amp;myVar3=yetAnotherTest'"/>

 <xsl:template match="/">
     <xsl:call-template name="GetQueryStringParams"/>
 </xsl:template>

 <xsl:template name="GetQueryStringParams">
  <xsl:param name="pUrl" select="$pUrl"/>

      <xsl:variable name="vQueryPart" select=
      "substring-before(substring-after(concat($pUrl,'?'),
                                        '?'),
                      '?')"/>

      <xsl:variable name="vHeadVar" select=
       "substring-before(concat($vQueryPart,'&amp;'), '&amp;')"/>

       <xsl:element name="{substring-before($vHeadVar, '=')}">
         <xsl:value-of select="substring-after($vHeadVar, '=')"/>
       </xsl:element>

    <xsl:variable name="vRest" select="substring-after($vQueryPart, '&amp;')"/>

    <xsl:if test="string-length($vRest) > 0">
       <xsl:call-template name="GetQueryStringParams">
         <xsl:with-param name="pUrl" select=
         "concat('?', substring(substring-after($vQueryPart, $vHeadVar), 2))"/>
       </xsl:call-template>
    </xsl:if>
 </xsl:template>
</xsl:stylesheet>

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

<myVar>test</myVar>
<myVar2>anotherTest</myVar2>
<myVar3>yetAnotherTest</myVar3>
...