Кодировка URL XSLT версии 1

Есть ли функция кодирования 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>

Спасибо,


person van    schedule 11.03.2010    source источник


Ответы (4)


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

[дата обновления 2]

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

person Gabriele Petrioli    schedule 11.03.2010
comment
вызов как ‹xsl:value-of select=custom:uriencode($PrimarySubject) /› вызывает ошибку, это не правильный способ вызова? - person van; 11.03.2010
comment
попробуйте вызвать его с помощью <xsl:value-of select="custom:uriencode(string($PrimarySubject))" /> - person Gabriele Petrioli; 11.03.2010
comment
какая ошибка возвращается? ( вы правильно добавили пространство имен ? ) - person Gabriele Petrioli; 11.03.2010
comment
да - спасибо, добавил пространство имен, к сожалению, ошибка не отображается, поскольку она выполняет преобразование на странице sharepoint ... Я вношу изменения в конструкторе MS Sharepoint для xslt и просматриваю на странице Sharepoint. - person van; 11.03.2010
comment
я добавил второе обновление в отношении MSXML6, не позволяющее по умолчанию использовать скрипты внутри XSLT. - person Gabriele Petrioli; 11.03.2010
comment
На случай, если кто-нибудь придет сюда и задастся вопросом: чтобы разрешить сценарии при использовании XslCompiledTransform.Trasform в С# .Net, вы должны использовать этот код: XsltSettings xslt_settings = new XsltSettings(); xslt_settings.EnableScript = true; XslCompiledTransform objXSLTransform = new XslCompiledTransform(); objXSLTransform.Load(strXSLTFile, xslt_settings, new XmlUrlResolver()); - person davidthegrey; 17.01.2019

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

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

Описание: только очень небольшое подмножество символов ASCII можно безопасно встроить в URI. Символы за пределами этого набора должны быть экранированы с использованием так называемого «кодирования URL» или «%-экранирования». Символы преобразуются в байты в соответствии с некоторой кодировкой (если возможно, ASCII), и каждый из этих байтов записывается как «%», за которым следуют 2 шестнадцатеричных цифры. Кодировка, используемая в качестве основы для этого преобразования, может быть любой, но, как правило, определяется контекстом, в котором используется 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-encode.xsl кодирует URL-адрес произвольной строки, переданной в качестве параметра с именем iso-string. Предполагается, что ISO-8859-1 будет основой для кодирования URL. Он должен быть совместим с любым процессором XSLT 1.0.

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

person Mads Hansen    schedule 19.08.2010
comment
К сожалению, это не универсальное решение, поскольку эти таблицы стилей ограничены Latin1 и не переводят всю кодировку Unicode. - person dolmen; 18.10.2010

Нет ни одного. XSLT не знает URL-адресов и HTML.

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

person Oded    schedule 11.03.2010

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

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

person Boldewyn    schedule 11.03.2010