2010-03-11 2 views
13

Есть ли функция кодирования URL-адресов в XSLT версии 1? Мне нужно что-то подобное функции encodeURIComponent в javascript?XSLT версия 1 URL-кодировка

Видя, что это невозможно, поскольку я использую платформу .NET, поскольку XSLT применяется к странице Sharepoint. Есть ли способ, чтобы закодировать это купить вызов яваскрипта функцию кодирования внутри XML, фрагмент кода ниже:

<xsl:template name="BuildLink"> 
    <xsl:param name="PrimarySubject" /> 
    <xsl:text>?PrimarySubject=</xsl:text> 
    <xsl:value-of select="$PrimarySubject" /> 
</xsl:template> 

Спасибо,

ответ

12

вы можете использовать JScript встроенным в XSLT ...

<msxsl:script language="JScript" implements-prefix="custom"> 
function uriencode(string) { 
return encodeURIComponent(string); 
} 
</msxsl:script> 

и назвать его как custom:uriencode(url_to_encode)

Вам в первую очередь необходимо определить пространство имен, хотя путем добавления к <xsl:stylesheet ... тегу xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:custom="http://youdomain.ext/custom"

[обновление]

URL, я поставил для пользовательского пространства имен может быть что угодно .. it is just a unique identifier ..
(ссылка делается вывод, что это менее запутанным, если вы не используете URL в качестве идентификатора ..)

[udpdate 2]

Дополнительная информация.
Если вы используете MSXML6, то вам необходимо вручную разрешить сценарии в XSLT, используя свойство AllowXsltScript .. (reference)
В зависимости от того, как вы загрузите и XSLT его настройки взглянуть на примеры в Script Blocks Using msxsl:script о том, как в Alow сценарии

+0

вызов в вызывает ошибку это не правильно называть его? – van

+0

попробуйте вызвать его с помощью < ' –

+0

используется строка, но все еще нет кости ... – van

1

Существует не один. XSLT не знает URL и HTML.

В зависимости от языка и платформы, которую вы используете, вы можете использовать XSLT extension, который делает это.

1

В некоторых случаях вы можете использовать EXSLT (расширения для парсера): Dave Pawson's XSLT FAQ на этом.

Однако XSLT завершен в Turing, поэтому вы можете написать базовый URL-кодер в XSLT, теоретически (я бы не стал пытаться).

7

Эти XSLT 1.0 stylesheets могут быть использованы для выполнения URL кодирования/декодирования:

  1. url-decode.xsl
  2. url-encode.xsl

Описание: Только очень небольшое подмножество из ASCII символов может быть безопасно встроенными в URI.Символы вне этот набор должен быть экранирован с использованием так называемой «кодировки URL» или «% -escaping». Символы: преобразуются в байты в соответствии с некоторой кодировкой (возможно, ASCII), а те байтов записываются как «%» , за которыми следуют две шестнадцатеричные цифры. Кодирование , используемое в качестве основы для этого преобразования , может быть любым, но имеет тенденцию , которое должно определяться контекстом, в котором используется URI. Недавние и в будущих стандартах используют UTF-8, но унаследованные приложения, в том числе много широко распространенных серверных процессоров данных формы HTML принимают ISO-8859-1.

Например, приветствие «¡Hola, César!» могут быть встроены в URI, если он записывается следующим образом: % A1Hola% 2C% 20C% E9sar !. (... при условии, что ISO-8859-1 в качестве основы для кодирования. Если бы это был UTF-8, то было бы %% C2% A1Hola% 2C% 20C% C3% A9sar!).

URL-код url-encode.xsl-кодирует произвольную строку , переданную как параметр с именем iso-string. Предполагается, что ISO-8859-1 станет основой для кодирования URL-адреса . Он должен быть совместим с с любым процессором XSLT 1.0.

Декодирование строки, основанной на ISO-8859-1, с использованием кодировки с использованием URL-адреса использует аналогичную технику . См. Url-decode.xsl для демонстрации . Его параметром url является строка , подлежащая расшифровке.

+0

Unfortunaltely это не универсальное решение, так как эти таблицы стилей ограничены латиницей1 и не переводят всю кодировку Unicode. – dolmen