XSLT версия 1 URL-кодирование

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

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

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

Спасибо,

Ответ 1

Вы можете использовать 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, который я указал для пользовательского пространства имен, может быть любым... это просто уникальный идентификатор.
(по ссылке делается вывод, что это менее запутанно, если вы не используете URL в качестве идентификатора..)

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

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

Ответ 2

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

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

Например, приветствие "Хола, 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 - это строка для декодирования.

Ответ 3

Нет. XSLT не знает URL и HTML.

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

Ответ 4

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

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