xslt: Импорт файла стилей, содержащего <msxsl:script
От: teleroot  
Дата: 24.05.12 16:00
Оценка:
Добрый день!
Используется процессор от MS. В проекте имеется множество файлов xslt, сформированных по принципу модульности.
Линковка файлов осуществляется с помощью инструкции xsl:import, которая до некоторого времени меня полностью устраивала, т.к. в отличие от xsl:include позволяла разрешать конфликты имен шаблонов, переменных и проч.
Проблема:
Если в линкуемом файле содержится блок msxsl:script, то данный файл не удается импортировать более чем один раз. Например, если есть утилитарный файл шаблонов utils.xslt и он используется в файлах a1.xslt и a2.xslt, то мы не сможем импортировать эти два файла в еще один файл main.xslt — возникает ошибка "This method has the same name and parameter types as another method in this class"
То есть xsl:import, похоже, не ресолвит конфликты блоков script.

Пробовал вариант
<msxsl:script language="JScript" implements-prefix="ext">
<![CDATA[
this['replace'] = function(x, from, to) {
return x.replace(new RegExp(from, 'g'),to);
}
]]>
</msxsl:script>

Но к сожалению он работает только, если трансформация производится в IE. В Visual Studio 2010 при отладке ошибка "Expected identifier" на (this[..])

Может кто знает волшебное решение?
Re: xslt: Импорт файла стилей, содержащего <msxsl:script
От: baranovda Российская Империя  
Дата: 24.05.12 16:23
Оценка:
Здравствуйте, teleroot, Вы писали:

T>Пробовал вариант

T><msxsl:script language="JScript" implements-prefix="ext">
T> <![CDATA[
T> this['replace'] = function(x, from, to) {
T> </msxsl:script>
T>Может кто знает волшебное решение?

Да уж куда волшебнее:

function Replace(x, from, to)
{
...
}

Зачем эти привнесенные модой из Ajax-а выкрутасы с замыканиями и анонимными функциями?
Re[2]: xslt: Импорт файла стилей, содержащего <msxsl:script
От: teleroot  
Дата: 24.05.12 20:12
Оценка:
Здравствуйте, baranovda, Вы писали:

B>Здравствуйте, teleroot, Вы писали:


T>>Пробовал вариант

T>><msxsl:script language="JScript" implements-prefix="ext">
T>> <![CDATA[
T>> this['replace'] = function(x, from, to) {
T>> </msxsl:script>
T>>Может кто знает волшебное решение?

B>Да уж куда волшебнее:


B>function Replace(x, from, to)

B>{
B>...
B>}

B>Зачем эти привнесенные модой из Ajax-а выкрутасы с замыканиями и анонимными функциями?


Вопрос как бы не о javascript-e как таковом

А о том, как многократно импортировать файл xslt, содержащий блоки msxsl:script
Re: xslt: Импорт файла стилей, содержащего <msxsl:script
От: Lloyd Россия  
Дата: 24.05.12 20:30
Оценка:
Здравствуйте, teleroot, Вы писали:

T>Если в линкуемом файле содержится блок msxsl:script, то данный файл не удается импортировать более чем один раз. Например, если есть утилитарный файл шаблонов utils.xslt и он используется в файлах a1.xslt и a2.xslt, то мы не сможем импортировать эти два файла в еще один файл main.xslt — возникает ошибка "This method has the same name and parameter types as another method in this class"


Если попробовать вместо this['replace'] = function... использовать var replace = function... ?
Re[2]: xslt: Импорт файла стилей, содержащего <msxsl:script
От: teleroot  
Дата: 24.05.12 20:41
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Если попробовать вместо this['replace'] = function... использовать var replace = function... ?


Увы, результат: 'replace' is already defined

Пробовал также без var
replace = function(...

И опять "This method has the same name and parameter types as another method in this class" плюс "Syntax error"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.