2010-06-14 2 views
1

Я новичок в XSL и, следовательно, новичок в использовании скриптов в XSL.сообщение об ошибке URI не идентифицирует внешний класс Java

Я взял пример кода (также используя C#) и адаптировал его для моего собственного использования .. но он не работает.

EDIT: Этот код работает в Visual Studio .. Ошибка генерируется только в Oxygen ... Я все еще хочу, чтобы она была безошибочной в Oxygen, поэтому любое понимание оценено!

Сообщение об ошибке: URI, урна: CS-скрипты не определяет на внешний класс Java

Соответствующий код у меня есть:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
xmlns:tok="urn:cs-scripts"> 

... 
... 
... 
</xsl:template> 


<xsl:variable name="temp"> 
    <xsl:value-of select="tok:getList('AAA BBB CCC', ' ')"/> 
</xsl:variable> 

<msxsl:script language="C#" implements-prefix="tok"> 
    <![CDATA[ 
    public string[] getList(string str, char[] delim) 
    { 
    return str.Split(delim, StringSplitOptions.None); 
    } 

    public string getString(string[] list, int i) 
    { 
    return list[i]; 
    } 
    ]]> 
</msxsl:script> 


</xsl:stylesheet> 
+0

Хороший вопрос (+1). См. Мой ответ, описывающий чистое решение XSLT. –

ответ

4

Декларация

xmlns:tok="urn:cs-script" 

относится к функции, созданной на C# в вашем XSLT. Oxygen создается в java и, следовательно, не может загрузить/скомпилировать функцию обратного вызова C#.

Если вы хотите удалить ошибку в Oxygen, удалите функцию обратного вызова C# (которая будет работать только в среде .Net).

+0

@Svenson: хм .. поэтому я не могу использовать C#. И я должен использовать Java? никакие другие скрипты не будут работать? JavaScript? PHP? и т.д.? – developer

+0

Если вы выполняете XSLT в .Net, вы можете использовать его (и просто игнорировать ошибку Oxygen). Если вы используете xslt в какой-либо другой среде, вы не можете его использовать. Вам придется создавать чистые функции XSLT без обратного вызова во внешнюю среду выполнения. –

2

Вам не нужна функция расширения для разделения строки на слова.

Просто используйте шаблон FXSL 1.x str-split-to-words, как описано here.

Поскольку FXSL написано в XSLT, она работает с любыми процессорами XSLT 2.0 и XSLT 1.x - с MSXML или любым процессором, поддерживающим расширение EXSLT node-set() (также поддерживаемый XslCompiledTransform в .NET).

+0

В настоящее время я использую рекурсивное решение в xsl, но то, что мне нужно выполнить, будет еще более сложным, и было бы проще добавить функцию расширения. У меня есть некоторые другие вещи, которые я хочу делать с C#, поэтому мне придется переключиться на Visual Studio для этих файлов (хотя Oxygen гораздо удобнее использовать для xsl ..: S) Но спасибо за ваш ответ! Всегда оценивайте это :) – developer

Смежные вопросы