Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JavaScript классы в XSL 
:(
    Опции темы
tachurochka
Дата 26.4.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.4.2010

Репутация: нет
Всего: нет



Подскажите, можно ли использовать скриптовые классы в xsl? Есть вот такой код в xsl:
Код

function Test1(str)
{
    this.str = str;
}

Test1.prototype.getStr = function()
{
    return this.str;
}

function test()
{
    var newTest1 = new Test1("some string");
    return (newTest1.getStr());
}


Код находится в CDATA. При загрузки файла получаю ошибку 'Syntax error' в этой строке: Test1.prototype.getStr = function()
XSL файл рабочий, если убрать скрипт из него. Так что проблема только с этим кодом. 

Если вставить этот скрипт, чтобы он выполнился на клиентской стороне, то он работает безо всяких ошибок. 
PM MAIL   Вверх
diadiavova
Дата 26.4.2010, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Вообще-то проблем это вызывать не должно, так что надо смотреть весь код xsl


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
tachurochka
Дата 26.4.2010, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.4.2010

Репутация: нет
Всего: нет



Вот небольшой пример:
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:user="http://mycompany.com/mynamespace" xmlns:MSHelp="http://msdn.microsoft.com/mshelp" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
  
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="root">
    <xsl:value-of select="user:test()"/>
  </xsl:template>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
  <msxsl:script language="JavaScript" implements-prefix="user">
<![CDATA[
    function Test1(str)
{
    this.str = str;
}

Test1.prototype.getStr = function()
{
    return this.str;
}

function test()
{
    var newTest1 = new Test1("some string");
    return (newTest1.getStr());
}
  ]]> 
    </msxsl:script>  
</xsl:stylesheet>


Если удалить весь код, кроме функции test (оставить только вызов функции), все работает нормально. Какие идеи есть?
PM MAIL   Вверх
diadiavova
Дата 26.4.2010, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



tachurochka, когда используешь расширение стандарта, надо об этом писать. В самом стандарте xslt нет возможности использования скриптов, это расширение от майкрософт. Кроме того тут используется не обычный jscript, а скорее jscript.Net, со всеми вытекающими. Вот такой код работает
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:user="http://mycompany.com/mynamespace"
                xmlns:MSHelp="http://msdn.microsoft.com/mshelp"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="root">
    <xsl:value-of select="user:test()"/>
  </xsl:template>
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <msxsl:script language="JavaScript" implements-prefix="user" >
    <![CDATA[
  expando function Test1(str)
  {
    this.str = str;
    this.getStr = function()
    {
        return this.str;
    }
    return this;
  }

function test()
{
    var newTest1 = new Test1("some string");
    return (newTest1.getStr());
}
  ]]>
  </msxsl:script>
</xsl:stylesheet>



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
tachurochka
Дата 27.4.2010, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.4.2010

Репутация: нет
Всего: нет



спасибо большое. Попробую этот код. Никогда не слышала про expando. 
PM MAIL   Вверх
diadiavova
Дата 27.4.2010, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(tachurochka @  27.4.2010,  09:34 Найти цитируемый пост)
Никогда не слышала про expando.  

http://msdn.microsoft.com/ru-ru/library/ch...b(v=VS.90).aspx
Это работает если преобразование выполняется из своего .Net-приложения или из Visual Studio(в ней и тестировал). Если код запускается в браузере(ИЕ), то экспандо надо убрать.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
tachurochka
Дата 10.5.2010, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.4.2010

Репутация: нет
Всего: нет



спасибо за ответ. А может есть что нибудь еще для того, что бы работать с так называемыми anonymous функциями? Вот такой пример:

Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:user="http://mycompany.com/mynamespace"
                xmlns:MSHelp="http://msdn.microsoft.com/mshelp"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="root">
    <xsl:value-of select="user:test()"/>
  </xsl:template>
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <msxsl:script language="JavaScript" implements-prefix="user" >
    <![CDATA[
var pasta = function(grain, width, shape, hasEgg) {
   this.grain = grain;    // What grain is it made of?
   this.width = width;    // How many centimeters wide is it?
   this.shape = shape;    // What is the cross-section?
   this.hasEgg = hasEgg;  // Does it have egg yolk as a binder?
   this.toString = pastaToString;
}

// The function to display the contents of a pasta object.
function pastaToString() {
   return "Grain: " + this.grain + "\n" +
          "Width: " + this.width + " cm\n" +
          "Shape: " + this.shape + "\n" +
          "Egg?:  " + Boolean(this.hasEgg);
}


function test()
{
    var spaghetti = new pasta("wheat", 0.2, "circle", true);
    return spaghetti.toString();
    //return "fsdfs";
}
  ]]>
  </msxsl:script>
</xsl:stylesheet>


При выполнении этой XSL возникает ошибка "A class member initializer cannot contain a function expression ".
PM MAIL   Вверх
diadiavova
Дата 10.5.2010, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Да по-моему такая конструкция и в обычном яваскрипте не должна работать smile
Такой синтаксис вроде применим для обычных функций, а не для конструкторов типов. То есть функцию pasta надо было описать так
Код

function pasta(...

А для функций, которые просто потом будут вызываться для выполнения каких-либо действий можно использовать оба синтаксиса.

Цитата(tachurochka @  10.5.2010,  17:27 Найти цитируемый пост)
А может есть что нибудь еще для того, что бы работать с так называемыми anonymous функциями? 

Опять-таки ты не указываешь на чём выполняется преобразование, я уже писал, что от этого зависит какие языки допустимо использовать. Если это браузер, то там работают те же правила, что и в браузерном jscript'е, а если это visual studio или своё .net-приложение, то там можно кроме jscript.net использовать ещё и C# и VB.Net. Хочешь работать с анонимными методами - можно использовать их.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
tachurochka
Дата 11.5.2010, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.4.2010

Репутация: нет
Всего: нет



Цитата

Да по-моему такая конструкция и в обычном яваскрипте не должна работать 

Этот скрипт работает нормально, если я засуну его для выполнения на стороне клиента в браузере.

Цитата

Опять-таки ты не указываешь на чём выполняется преобразование

Преобразование xsl я делаю в Visual Studio. Я знаю, что в xsl можно использовать С# и может быть это будет удобнее. Просто я пытаюсь переделать большой и сложный скрипт, который сейчас работает на клиентской стороне web приложения и следовательно написан на javascript.
PM MAIL   Вверх
diadiavova
Дата 11.5.2010, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(tachurochka @  11.5.2010,  14:39 Найти цитируемый пост)
Преобразование xsl я делаю в Visual Studio. 

Ну я ведь писал об этом уже.
Цитата(diadiavova @  26.4.2010,  17:55 Найти цитируемый пост)
 Кроме того тут используется не обычный jscript, а скорее jscript.Net, со всеми вытекающими. 

jscript.net - это немного другой язык. В нём всё что работает в яваскрипте работать не обязано. Я дал ссылку на документацию по этому языку, всё там. В jscript.net, например можно объявить класс при помощи слова class итд, то есть это не одно и то же, не смотря на некоторую совместимость, поэтому если в нём не работают какие-то конструкции из браузерного jscript'а - это совершенно нормальная ситуация.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.