Я думаю, вы здесь не на том пути. Не XSLT экранирует ваш URL, это браузер.
Единственные escape-последовательности, известные XML (и, следовательно, XSLT), имеют вид "&xxx;
". «%xx
» ваших строк URL остается без изменений.
Проблема в том, что ваш <a href="...">
содержит именно ту строку, с которой его пытается браузер. Таким образом, вы делаете что-то не так при кодировании URL.
Когда файл в файловой системе хранится как:
FW%3AImportant.xml
тогда правильный URL для ссылки должен быть:
<a href="FW%253AImportant.xml">FW%3AImportant.xml</a>
<!-- ------^^^ the '%' char itself must be escaped! -->
Это означает, что вы должны закодировать строку в URL, прежде чем поместить ее в атрибут href
, как и в любой другой системе, генерирующей HTML.
К сожалению, в XSLT нет встроенной функции кодирования URL. Это означает, что вы можете использовать функцию расширения вашей среды XSLT или выполнить кодирование в отдельном шаблоне с использованием строковых функций XPath. Так как правильная кодировка URL не совсем тривиальна, я рекомендую использовать что-то проверенное здесь. Вот таблица стилей, на которую вы можете ссылаться (<xsl:import>
), которая делает это за вас: http://skew.org/xml/stylesheets/url-encode/