Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Использование переменных в XSL


Автор: ProffTV 28.9.2009, 17:10
Есть такой XSL-код (привожу отрывок):
    <xsl:template match="/">
        <html>
            <head>
                <style type="text/css">
                    body    { font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 15px; font-weight: bold; }
                </style>
                <script language="JScript" type="text/JavaScript">
                    var SortParam = "title";
                    
                    function GetSortParam(){return SortParam;}
                </script>
            </head>
            <body>
                <div id="main">
                    <xsl:variable name="SortParam" select="Как_Сюда_Запихнуть_Результат_GetSortParam()"/>
                    
                    <xsl:apply-templates select="itm">
                        <xsl:with-param name="Param" select="$SortParam"/>
                    </xsl:apply-templates>
                </div>
            </body>
        </html>
    </xsl:template>

Вопрос: Как для значения параметра SortParam задать результат функции GetSortParam()???

Автор: diadiavova 28.9.2009, 17:19
Код

 <xsl:variable name="SortParam"><xsl"value-of select="GetSortParam()"/></xsl:variable>

Автор: ProffTV 28.9.2009, 17:28
Спасибо за ответ, но ведь GetSortParam - моя функция из JS,а в вашем ответе обработчик XSL будет считать, что это стандартная функция XSL-языка...
одним словом, не пашет...

Автор: diadiavova 28.9.2009, 19:16
Я немного невнимательно прочитал код. Та функция не воспринимается XSLT-процессором, как функция. Это просто выходные данные. Поэтому ответ - никак. Просто некоторые процессоры от microsoft позволяют вставлять скрипты в xsl, я по невнимательности решил, что речь об этом. Но там совсем другой синтаксис. Так примерно
Код

<msxsl:script implements-prefix="user" language="JScript">
        <msxsl:using namespace="System.Xml.XPath"/>
        <![CDATA[
      function name (iterator : XPathNodeIterator) 
      {
        if (iterator.MoveNext()) 
        {
          var nav : XPathNavigator = iterator.Current;
          return nav.LocalName;
        }
        return "";
      }]]>
    </msxsl:script>


Добавлено через 58 секунд
А взаголовке надо объявить 
Код

xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"


Автор: ProffTV 29.9.2009, 08:42
Эту возможность я знаю...   Просто надо не перегружая XML делать несколько преобразований по запросу пользователя...   Придется все обработки XSL переписывать в JS, хранящийся в HTML, хранящийся в темплейте "/"(во как завернул). А так хотелось скрестить JS из XSL с JS из HTML-части той-же XSL...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)